diff --git a/.asf.yaml b/.asf.yaml index 32f9b9c7..450e07db 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -16,7 +16,7 @@ # # `.asf.yaml` is a branch-specific YAML configuration file for Git repositories to control features such as notifications, GitHub settings, etc. -# See its documentation for details: https://cwiki.apache.org/confluence/display/INFRA/Git+-+.asf.yaml+features +# See its documentation for details: https://github.com/apache/infrastructure-asfyaml # Bare minimum `notifications` to # @@ -63,9 +63,24 @@ github: # Prevent force pushes to primary branches protected_branches: + main: - # All commits must be signed - required_signatures: true + # All reviews must be addressed before merging + required_conversation_resolution: true + # Require checks to pass before merging + required_status_checks: + checks: + # The GitHub Actions app: 15368 + - app_id: 15368 + context: "build / build (ubuntu-latest)" + # The GitHub Advanced Security app: 57789 + - app_id: 57789 + context: "CodeQL" + # At least one positive review must be present + required_pull_request_reviews: + required_approving_review_count: 1 + + gha/v0: # All reviews must be addressed before merging required_conversation_resolution: true # Require checks to pass before merging diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml index dcb23212..d180b2c2 100644 --- a/.github/dependabot.yaml +++ b/.github/dependabot.yaml @@ -17,33 +17,50 @@ version: 2 -# Add Maven Central explicitly to work around: -# https://github.com/dependabot/dependabot-core/issues/8329 -registries: - maven-central: - type: maven-repository - url: https://repo.maven.apache.org/maven2 - updates: + # region `main` updates + - package-ecosystem: maven directory: "/" schedule: - interval: daily - open-pull-requests-limit: 10 + interval: monthly + groups: + dependencies: + patterns: [ "*" ] + target-branch: "main" registries: - maven-central - package-ecosystem: github-actions directory: "/" schedule: - interval: daily + interval: monthly + groups: + dependencies: + patterns: [ "*" ] + target-branch: "main" - package-ecosystem: npm directory: "/" schedule: interval: monthly groups: - all: - patterns: - - "*" + dependencies: + patterns: [ "*" ] + target-branch: "main" + + # endregion + + # region `gha/v0` updates + + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: monthly + groups: + dependencies: + patterns: [ "*" ] + target-branch: "gha/v0" + + # endregion diff --git a/.github/workflows/build-reusable.yaml b/.github/workflows/build-reusable.yaml deleted file mode 100644 index 1c96d0a4..00000000 --- a/.github/workflows/build-reusable.yaml +++ /dev/null @@ -1,214 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to you under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -name: build-reusable - -on: - workflow_call: - inputs: - develocity-enabled: - description: Enable Develocity Build Scan publication - default: false - type: boolean - java-version: - description: The Java compiler version - default: 17 - type: string - maven-args: - description: Additional Maven arguments - type: string - ref: - description: The branch, tag or SHA to checkout - # When running on `pull_request_target` use the PR branch, not the target branch - default: ${{ github.event_name == 'pull_request_target' && github.head_ref || github.ref }} - type: string - repository: - description: GitHub repository name with owner - default: ${{ github.repository }} - type: string - reproducibility-check-enabled: - description: Runs a reproducibility check on the build - default: true - type: boolean - site-enabled: - description: Flag indicating if Maven `site` goal should be run - default: false - type: boolean - test-report-enabled: - description: Enables the upload of test reports - default: true - type: boolean - test-report-suffix: - description: Suffix to add to the uploaded artifacts - default: '' - type: string - - secrets: - DV_ACCESS_TOKEN: - description: Access token to Gradle Enterprise - required: false - -env: - MAVEN_ARGS: ${{ inputs.maven-args }} - -# Explicitly drop all permissions inherited from the caller for security. -# Reference: https://docs.github.com/en/actions/sharing-automations/reusing-workflows#access-and-permissions -permissions: { } - -jobs: - - build: - - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - os: [ macos-latest, ubuntu-latest, windows-latest ] - - steps: - - - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 - with: - repository: ${{ inputs.repository }} - ref: ${{ inputs.ref }} - - - name: Set up Java - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # 5.0.0 - with: - distribution: zulu - java-version: ${{ inputs.java-version }} - cache: maven - - - name: Set up Develocity - if: inputs.develocity-enabled - shell: bash - run: | - if [ -f .mvn/develocity.xml ]; then - DEVELOCITY_VERSION=$(./mvnw help:evaluate -q -DforceStdout -Dexpression=develocity-maven-plugin.version) - USER_DATA_VERSION=$(./mvnw help:evaluate -q -DforceStdout -Dexpression=develocity-user-data-extension.version) - cat >.mvn/extensions.xml < - - com.gradle - develocity-maven-extension - $DEVELOCITY_VERSION - - - com.gradle - common-custom-user-data-maven-extension - $USER_DATA_VERSION - - - EOF - # Print file for debugging purposes - cat .mvn/extensions.xml - fi - - - name: Setup Develocity Build Scan capture - if: inputs.develocity-enabled - uses: gradle/develocity-actions/setup-maven@4a2aed82eea165ba2d5c494fc2a8730d7fdff229 # 1.4 - with: - develocity-access-key: ${{ secrets.DV_ACCESS_TOKEN }} - - # We use `install` instead of `verify`, otherwise the build website step below fails - - name: Build - id: build - shell: bash - run: | - ./mvnw \ - --show-version --batch-mode --errors --no-transfer-progress \ - -DtrimStackTrace=false \ - -DinstallAtEnd=true \ - clean install - - # We upload tests results. - - name: Upload test reports - if: ${{ always() && inputs.test-report-enabled }} - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # 4.6.2 - with: - name: "test-report-${{matrix.os}}-${{github.run_number}}-${{github.run_attempt}}${{inputs.test-report-suffix}}" - path: | - **/target/surefire-reports - **/target/logs - - - name: Clean up Develocity - if: inputs.develocity-enabled - shell: bash - run: | - rm -f .mvn/extensions.xml - # Clean up changes introduced by gradle/develocity-actions/maven-setup - echo "MAVEN_OPTS=" >> "$GITHUB_ENV" - - # Node.js cache is needed for Antora - - name: Set up Node.js cache - if: inputs.site-enabled - id: nodejs-cache - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # 4.2.4 - with: - # We should be calculating the cache key using `package-lock.json` instead! - # See https://stackoverflow.com/a/48524475/1278899 - # For that, `package-lock.json` needs to be committed into the repository – right now it is `.gitignore`d. - # Once it is there, we should ideally switch from `npm i` to `npm ci`. - # For that, we need to configure `dependabot` to update hundreds of dependencies listed in `package-lock.json`. - # That translates to a never ending rain of `dependabot` PRs. - # I doubt if the wasted CPU cycles worth the gain. - key: "${{ runner.os }}-nodejs-cache-${{ hashFiles('node', 'node_modules') }}" - # `actions/cache` doesn't recommend caching `node_modules`. - # Though none of its recipes fit our bill, since we install Node.js using `frontend-maven-plugin`. - # See https://github.com/actions/cache/blob/main/examples.md#node---npm - # We settle for this quick-n-dirty solution for the time being. - path: | - node - node_modules - - - name: Build the website - if: inputs.site-enabled - shell: bash - env: - # Making Node.js cache hit visible for debugging purposes - NODEJS_CACHE_HIT: ${{ steps.nodejs-cache.outputs.cache-hit }} - run: | - ./mvnw \ - --show-version --batch-mode --errors --no-transfer-progress \ - site - - # `clean verify artifact:compare` is required to generate the build reproducibility report. - # For details, see: https://maven.apache.org/guides/mini/guide-reproducible-builds.html#how-to-test-my-maven-build-reproducibility - - name: Verify build reproducibility - if: inputs.reproducibility-check-enabled - id: reproducibility - shell: bash - run: | - ./mvnw \ - --show-version --batch-mode --errors --no-transfer-progress \ - -DskipTests=true \ - clean verify artifact:compare - - # Upload reproducibility results if the build fails. - - name: Upload reproducibility results - if: inputs.reproducibility-check-enabled && failure() && steps.reproducibility.conclusion == 'failure' - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # 4.6.2 - with: - name: reproducibility-${{matrix.os}}-${{github.run_number}}-${{github.run_attempt}} - path: | - **/target/bom.xml - **/target/*.buildcompare - **/target/*.jar - **/target/*.zip - **/target/reference/** diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 7a145cbe..6b9e789a 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -23,14 +23,9 @@ on: - "main" - "release/*" paths-ignore: - - "**.adoc" - "**.md" - "**.txt" pull_request: - paths-ignore: - - "**.adoc" - - "**.md" - - "**.txt" # If the branch is `main`, run once per commit. # If the branch is `release/*`, allow only one concurrent run. @@ -46,14 +41,14 @@ jobs: build: if: github.actor != 'dependabot[bot]' - uses: ./.github/workflows/build-reusable.yaml + uses: apache/logging-parent/.github/workflows/build-reusable.yaml@gha/v0 with: site-enabled: true deploy-snapshot: needs: build if: github.repository == 'apache/logging-parent' && github.ref_name == 'main' - uses: ./.github/workflows/deploy-snapshot-reusable.yaml + uses: apache/logging-parent/.github/workflows/deploy-snapshot-reusable.yaml@gha/v0 # Secrets for deployments secrets: NEXUS_USERNAME: ${{ secrets.NEXUS_USER }} @@ -62,7 +57,7 @@ jobs: deploy-release: needs: build if: github.repository == 'apache/logging-parent' && startsWith(github.ref_name, 'release/') - uses: ./.github/workflows/deploy-release-reusable.yaml + uses: apache/logging-parent/.github/workflows/deploy-release-reusable.yaml@gha/v0 # Secrets for deployments secrets: GPG_SECRET_KEY: ${{ secrets.LOGGING_GPG_SECRET_KEY }} diff --git a/.github/workflows/codeql-analysis-reusable.yaml b/.github/workflows/codeql-analysis-reusable.yaml deleted file mode 100644 index 217d5e89..00000000 --- a/.github/workflows/codeql-analysis-reusable.yaml +++ /dev/null @@ -1,74 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to you under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -name: codeql-analysis - -on: - workflow_call: - inputs: - java-version: - description: The Java compiler version - default: 17 - type: string - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'kotlin', 'python', 'ruby' ] - # Learn more about CodeQL language support at https://git.io/codeql-language-support - language: - description: Language used in the repository - default: java - type: string - -# Explicitly drop all permissions inherited from the caller for security. -# Reference: https://docs.github.com/en/actions/sharing-automations/reusing-workflows#access-and-permissions -permissions: { } - -jobs: - - analyze: - name: Analyze - runs-on: ubuntu-latest - # Permissions required to publish Security Alerts - permissions: - security-events: write - - steps: - - - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 - - - name: Initialize CodeQL - uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0 - with: - # Also check GitHub Actions - languages: ${{ inputs.language }}, actions - - - name: Setup JDK - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # 5.0.0 - with: - distribution: zulu - java-version: ${{ inputs.java-version }} - cache: maven - - - name: Build with Maven - shell: bash - run: | - ./mvnw \ - --show-version --batch-mode --errors --no-transfer-progress \ - -DskipTests \ - clean verify - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0 diff --git a/.github/workflows/codeql-analysis.yaml b/.github/workflows/codeql-analysis.yaml index fa2ea731..7dc9bdb9 100644 --- a/.github/workflows/codeql-analysis.yaml +++ b/.github/workflows/codeql-analysis.yaml @@ -21,9 +21,13 @@ name: codeql-analysis on: push: - branches: [ "main" ] + branches: + - "gha/v0" + - "main" pull_request: - branches: [ "main" ] + branches: + - "gha/v0" + - "main" schedule: - cron: '32 12 * * 5' @@ -34,21 +38,9 @@ permissions: { } jobs: analyze: - name: Analyze - runs-on: ubuntu-latest + uses: apache/logging-parent/.github/workflows/codeql-analysis-reusable.yaml@gha/v0 # Permissions required to publish Security Alerts permissions: + actions: read + contents: read security-events: write - - steps: - - - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 - - - name: Initialize CodeQL - uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0 - with: - languages: actions - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0 diff --git a/.github/workflows/deploy-release-reusable.yaml b/.github/workflows/deploy-release-reusable.yaml deleted file mode 100644 index 03b447f3..00000000 --- a/.github/workflows/deploy-release-reusable.yaml +++ /dev/null @@ -1,314 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to you under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -name: deploy-release-reusable - -on: - workflow_call: - inputs: - java-version: - description: The Java compiler version - default: 17 - type: string - project-id: - description: Identifier used in the distribution artifact and Subversion repository folder filenames (e.g., `logging-parent`) - required: true - type: string - outputs: - project-version: - description: The version of the project - value: ${{ jobs.deploy.outputs.project-version }} - nexus-url: - description: The URL of the Nexus repository used - value: ${{ jobs.deploy.outputs.nexus-url }} - secrets: - GPG_SECRET_KEY: - description: GPG secret key for signing artifacts - required: true - NEXUS_USERNAME: - description: Nexus staging repository username for deploying artifacts - required: true - NEXUS_PASSWORD: - description: Nexus staging repository password for deploying artifacts - required: true - SVN_USERNAME: - description: Subversion username for uploading the release distribution - required: true - SVN_PASSWORD: - description: Subversion password for uploading the release distribution - required: true - -# Explicitly drop all permissions inherited from the caller for security. -# Reference: https://docs.github.com/en/actions/sharing-automations/reusing-workflows#access-and-permissions -permissions: { } - -jobs: - deploy: - runs-on: ubuntu-latest - outputs: - project-version: ${{ steps.version.outputs.project-version }} - nexus-url: ${{ steps.nexus.outputs.nexus-url }} - permissions: - # Write permissions to allow the Maven `revision` property update, changelog release, etc. - contents: write - - steps: - - - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 - - - name: Set up Java & GPG - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # 3.7.0 - with: - distribution: zulu - java-version: ${{ inputs.java-version }} - cache: maven - server-id: apache.releases.https - server-username: NEXUS_USERNAME - server-password: NEXUS_PASSWORD - gpg-private-key: ${{ secrets.GPG_SECRET_KEY }} - - - name: Set up Git user - shell: bash - run: | - # Set up user name and email required for `git commit` - git config user.name "ASF Logging Services RM" - git config user.email private@logging.apache.org - - - name: Export version - id: version - shell: bash - env: - GIT_BRANCH_NAME: ${{ github.ref_name }} - run: | - [[ "$GIT_BRANCH_NAME" =~ ^release/.+$ ]] || { - echo "was expecting a \`release/\`-prefixed Git branch name, found: \`$GIT_BRANCH_NAME\`" - exit 1 - } - export PROJECT_VERSION=$(echo "$GIT_BRANCH_NAME" | sed 's/^release\///') - echo "PROJECT_VERSION=$PROJECT_VERSION" >> $GITHUB_ENV - # Export version to calling workflow - echo "project-version=$PROJECT_VERSION" >> $GITHUB_OUTPUT - - - name: Set the Maven `revision` property - shell: bash - run: | - export REVISION=$(./mvnw \ - --non-recursive --quiet --batch-mode \ - -DforceStdout=true \ - -Dexpression=revision \ - help:evaluate \ - | tail -n 1) - if [ "$REVISION" != "$PROJECT_VERSION" ]; then - echo "Maven \`revision\` property \`$REVISION\` doesn't match with the project version \`$PROJECT_VERSION\`, updating \`pom.xml\`..." - ./mvnw \ - --non-recursive --batch-mode --errors --no-transfer-progress \ - -Dproperty=revision \ - -DnewVersion="$PROJECT_VERSION" \ - -DgenerateBackupPoms=false \ - versions:set-property - git commit -S pom.xml -m "Set version to \`$PROJECT_VERSION\`" - git push -f origin - fi - - - name: Set the Maven `project.build.outputTimestamp` property - shell: bash - run: | - export PROPERTY="project.build.outputTimestamp" - grep -qE '^[\t ]+<'$PROPERTY'>' pom.xml || { - echo "Failed to find the \`$PROPERTY\` Maven property!" - exit 1 - } - export TIMESTAMP=$(TZ=UTC0 git show --quiet --date="format-local:%Y-%m-%dT%H:%M:%SZ" --format="%cd") - sed -r 's|^([\t ]+<'$PROPERTY'>).+()$|\1'$TIMESTAMP'\2|g' -i pom.xml - if [ -n "$(git status --porcelain)" ]; then - git commit -S pom.xml -m "Update the \`$PROPERTY\` property" - git push -f origin - fi - - - name: Release changelog - shell: bash - run: | - ./mvnw \ - --non-recursive --batch-mode --errors --no-transfer-progress \ - -P changelog-release - git add src - if [ -n "$(git status --porcelain)" ]; then - git commit -S src -m "Release changelog for version \`$PROJECT_VERSION\`" - git push -f origin - fi - - - name: Upload to Nexus - id: nexus - shell: bash - env: - # `NEXUS_USERNAME` and `NEXUS_PASSWORD` are used in `~/.m2/settings.xml` created by `setup-java` action - NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }} - NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }} - # `SIGN_KEY` is used by `sign-maven-plugin` - SIGN_KEY: ${{ secrets.GPG_SECRET_KEY }} - run: | - ./mvnw \ - --show-version --batch-mode --errors --no-transfer-progress \ - -P deploy,release - export NEXUS_URL=$(awk '/^(stagingRepository.url)/ { gsub(/(^.+=|\\)/, ""); print $1 }' target/nexus-staging/staging/*.properties) - echo "NEXUS_URL=$NEXUS_URL" >> $GITHUB_ENV - # Export repository URL to calling workflow - echo "nexus-url=$NEXUS_URL" >> $GITHUB_OUTPUT - - # Node.js cache is needed for Antora - - name: Set up Node.js cache - id: nodejs-cache - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # 4.2.4 - with: - # We should be calculating the cache key using `package-lock.json` instead! - # See https://stackoverflow.com/a/48524475/1278899 - # For that, `package-lock.json` needs to be committed into the repository – right now it is `.gitignore`d. - # Once it is there, we should ideally switch from `npm i` to `npm ci`. - # For that, we need to configure `dependabot` to update hundreds of dependencies listed in `package-lock.json`. - # That translates to a never ending rain of `dependabot` PRs. - # I doubt if the wasted CPU cycles worth the gain. - key: "${{ runner.os }}-nodejs-cache-${{ hashFiles('node', 'node_modules') }}" - # `actions/cache` doesn't recommend caching `node_modules`. - # Though none of its recipes fit our bill, since we install Node.js using `frontend-maven-plugin`. - # See https://github.com/actions/cache/blob/main/examples.md#node---npm - # We settle for this quick-n-dirty solution for the time being. - path: | - node - node_modules - - # Website build is needed to generate the release notes - - name: Build the website - shell: bash - env: - # Making Node.js cache hit visible for debugging purposes - NODEJS_CACHE_HIT: ${{ steps.nodejs-cache.outputs.cache-hit }} - run: | - export TIMESTAMP=$(./mvnw \ - --non-recursive --quiet --batch-mode \ - -DforceStdout=true \ - -Dexpression=project.build.outputTimestamp \ - help:evaluate \ - | tail -n 1) - ./mvnw \ - --show-version --batch-mode --errors --no-transfer-progress \ - site - - - name: Collect distribution attachments information - shell: bash - run: | - # Folder where the Nexus Staging Maven plugin places the staged artifacts - export ALT_DEPLOYMENT_REPO_FILEPATH="target/nexus-staging/staging" - - # This regex needs to work for both Java (`distribution` profile) and `find` (while counting attachments)! - # Hence, we don't escape dots, etc. with backslashes, which is problematic to get working in both worlds. - export DIST_ATTACHMENT_FILEPATH_PATTERN="^$ALT_DEPLOYMENT_REPO_FILEPATH/.+-$PROJECT_VERSION"'((-tests)?.jar|-cyclonedx.xml)$' - export DIST_ATTACHMENT_COUNT=$(find "$ALT_DEPLOYMENT_REPO_FILEPATH" -type f -regextype posix-extended -regex "$DIST_ATTACHMENT_FILEPATH_PATTERN" | wc -l) - - # Pass the necessary environment variables - cat >> $GITHUB_ENV << EOF - DIST_ATTACHMENT_FILEPATH_PATTERN=$DIST_ATTACHMENT_FILEPATH_PATTERN - DIST_ATTACHMENT_COUNT=$DIST_ATTACHMENT_COUNT - EOF - - - name: Create the distribution - shell: bash - env: - PROJECT_ID: ${{ inputs.project-id }} - run: | - - # Generate the distribution (i.e., `src.zip` and optional `bin.zip`) - ./mvnw \ - --show-version --batch-mode --errors --no-transfer-progress \ - --non-recursive \ - -P distribution \ - -DattachmentFilepathPattern="$DIST_ATTACHMENT_FILEPATH_PATTERN" \ - -DattachmentCount="$DIST_ATTACHMENT_COUNT" - - # Rename distribution files - export DIST_FILENAME_PREFIX="apache-${PROJECT_ID}" - export DIST_FILENAME_VERSIONED_PREFIX="${DIST_FILENAME_PREFIX}-${PROJECT_VERSION}" - export DIST_FILEPATH_PREFIX="/tmp/${DIST_FILENAME_VERSIONED_PREFIX}" - export DIST_FILEPATH_SRC="${DIST_FILEPATH_PREFIX}-src.zip" - export DIST_FILEPATH_BIN="${DIST_FILEPATH_PREFIX}-bin.zip" - mv "target/src.zip" "$DIST_FILEPATH_SRC" - test -f "target/bin.zip" && mv "$_" "$DIST_FILEPATH_BIN" - - # Create signature and checksum files - for DIST_FILEPATH in "$DIST_FILEPATH_SRC" "$DIST_FILEPATH_BIN"; do - if [ -f "$DIST_FILEPATH" ]; then - gpg --armor --detach-sign --yes --pinentry-mode error "$DIST_FILEPATH" - sha512sum "$DIST_FILEPATH" \ - | ( read CHECKSUM FILEPATH; echo $CHECKSUM" "$(basename "$FILEPATH") ) \ - > "$DIST_FILEPATH.sha512" - fi - done - - # Pass the necessary environment variables - cat >> $GITHUB_ENV << EOF - DIST_FILENAME_PREFIX=$DIST_FILENAME_PREFIX - DIST_FILENAME_VERSIONED_PREFIX=$DIST_FILENAME_VERSIONED_PREFIX - DIST_FILEPATH_PREFIX=$DIST_FILEPATH_PREFIX - EOF - - - name: Upload to Subversion - shell: bash - env: - PROJECT_ID: ${{ inputs.project-id }} - SVN_USERNAME: ${{ secrets.SVN_USERNAME }} - SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }} - run: | - - # Install Subversion - sudo apt install --assume-yes --no-install-recommends subversion - - # Find the effective Git commit ID - export COMMIT_ID=$(git rev-parse HEAD) - - # Checkout the SVN repository - export SVN_DIR="/tmp/svn-repo" - svn co \ - "https://dist.apache.org/repos/dist/dev/logging/$PROJECT_ID" \ - "$SVN_DIR" - cd "$SVN_DIR" - - # Switch to the distribution folder - [ -d "$PROJECT_VERSION" ] || { - mkdir "$PROJECT_VERSION" - svn add "$PROJECT_VERSION" - } - cd "$PROJECT_VERSION" - - # Clean up old files - find . -name "${DIST_FILENAME_PREFIX}*" -type f -print0 | xargs -0 -r svn delete - - # Generate emails - for EMAIL_TYPE in vote announce; do - "$GITHUB_WORKSPACE/.github/generate-email.sh" \ - "$EMAIL_TYPE" "$PROJECT_VERSION" "$COMMIT_ID" "$NEXUS_URL" \ - > "${DIST_FILENAME_VERSIONED_PREFIX}-email-${EMAIL_TYPE}.txt" - done - - # Copy the distribution - cp "$DIST_FILEPATH_PREFIX"* . - - # Add & commit changes - svn add "$DIST_FILENAME_PREFIX"* - svn commit \ - --username "$SVN_USERNAME" \ - --password "$SVN_PASSWORD" \ - -m "Added \`${DIST_FILENAME_PREFIX}\` artifacts for release \`${PROJECT_VERSION}\`" diff --git a/.github/workflows/deploy-site-reusable.yaml b/.github/workflows/deploy-site-reusable.yaml deleted file mode 100644 index d48c0177..00000000 --- a/.github/workflows/deploy-site-reusable.yaml +++ /dev/null @@ -1,189 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to you under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -name: deploy-site-reusable - -on: - workflow_call: - inputs: - asf-yaml-content: - description: The contents of the `.asf.yaml` that will be created - required: true - type: string - java-version: - description: The Java compiler version - default: 17 - type: string - install-required: - description: Flag indicating if Maven `install` goal should be run before running the `site` goal - default: false - type: boolean - target-branch: - description: The name of the branch the generated site content will be written to - required: true - type: string - target-path: - description: The directory path the generated site content will be placed under - default: "." - type: string - secrets: - GPG_SECRET_KEY: - description: GPG secret key for signing commits - required: true - -# Explicitly drop all permissions inherited from the caller for security. -# Reference: https://docs.github.com/en/actions/sharing-automations/reusing-workflows#access-and-permissions -permissions: { } - -jobs: - - deploy: - runs-on: ubuntu-latest - permissions: - # Write permissions for committing the generated site - contents: write - - steps: - - - name: Checkout the source branch - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 - - - name: Set up Java - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # 3.7.0 - with: - distribution: zulu - java-version: ${{ inputs.java-version }} - cache: maven - gpg-private-key: ${{ secrets.GPG_SECRET_KEY }} - - - name: Build the project - shell: bash - if: inputs.install-required - run: | - ./mvnw \ - --show-version --batch-mode --errors --no-transfer-progress \ - -Dmaven.test.skip \ - install - - # Node.js cache is needed for Antora - - name: Restore Node.js cache - id: nodejs-cache-restore - uses: actions/cache/restore@0400d5f644dc74513175e3cd8d07132dd4860809 # 4.2.4 - with: - # The cache is OS independent - enableCrossOsArchive: true - # The cache needs to be updated only when `logging-parent` is updated - key: "nodejs-cache-${{ hashFiles('package-lock.json') }}" - # Only the NPM modules need to be cached, since Node.js and NPM are retrieved from the Maven local repository - path: node_modules - - - name: Build the website - shell: bash - run: | - ./mvnw \ - --show-version --batch-mode --errors --no-transfer-progress \ - site - cd target/site - find . -empty -type d -delete - find . -print0 | sort --zero-terminated | xargs -0 zip -qoX "$RUNNER_TEMP/site.zip" - echo "SOURCE_COMMIT_ID=$(git rev-parse HEAD)" >> $GITHUB_ENV - - - name: Set up Git user - shell: bash - run: | - # Set up user name and email required for `git commit` - git config user.name "ASF Logging Services RM" - git config user.email private@logging.apache.org - - # Checking out a new branch will delete the `node_modules` folder, - # so we need to save the cache here. - - name: Save Node.js cache - uses: actions/cache/save@0400d5f644dc74513175e3cd8d07132dd4860809 # 4.2.4 - with: - key: ${{ steps.nodejs-cache-restore.outputs.cache-primary-key }} - path: node_modules - - - name: Create the target branch - shell: bash - env: - TARGET_BRANCH: ${{ inputs.target-branch }} - run: | - git ls-remote --exit-code --heads origin "refs/heads/$TARGET_BRANCH" >/dev/null 2>&1 || { - echo "Remote branch \`$TARGET_BRANCH\` doesn't exist, creating it" - git checkout --orphan "$TARGET_BRANCH" - echo "Content for initializing an orphan branch for the website to be generated from \`$SOURCE_COMMIT_ID\`" > README.txt - git add README.txt - git commit -S README.txt -m "Initial content for the website to be generated from \`$SOURCE_COMMIT_ID\`" - git push origin "$TARGET_BRANCH" - } - - - name: Checkout the target branch - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 - with: - ref: ${{ inputs.target-branch }} - - - name: Update the target path - shell: bash - env: - TARGET_PATH: ${{ inputs.target-path }} - ASF_YAML_CONTENT: ${{ inputs.asf-yaml-content }} - run: | - # Check if there already exists an `.asf.yaml` - ASF_YAML_EXISTS=$([ -f .asf.yaml ] && echo "true" || echo "false") - - # Clean up the target path - git ls-files -z -- "$TARGET_PATH" | xargs -0 git rm -rfq - - # Place the generated site - unzip -q "$RUNNER_TEMP/site.zip" -d "$TARGET_PATH" - git add "$TARGET_PATH" - - # Recover `.asf.yaml`, if there was one. - # Otherwise `git status` will always show a change even when there are no changes in the website content. - # That is because we always populate `.asf.yaml` with some random values at the end to fix an INFRA issue. - if [ "$ASF_YAML_EXISTS" = "true" ]; then - git checkout HEAD .asf.yaml - fi - - # Commit changes, if there are any - if [ -n "$(git status --porcelain)" ]; then - - # Commit & push site changes - git commit -S -a -m "Add website content generated from \`$SOURCE_COMMIT_ID\`" - git push -f origin - - # Populate `.asf.yaml` - cat >.asf.yaml <> $GITHUB_ENV - # Export version to calling workflow - echo "project-version=$PROJECT_VERSION" >> $GITHUB_OUTPUT - - - name: Upload to Nexus - shell: bash - env: - # `NEXUS_USERNAME` and `NEXUS_PASSWORD` are used in `~/.m2/settings.xml` created by `setup-java` action - NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }} - NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }} - run: | - ./mvnw \ - --show-version --batch-mode --errors --no-transfer-progress \ - -P deploy diff --git a/.github/workflows/merge-dependabot-reusable.yaml b/.github/workflows/merge-dependabot-reusable.yaml deleted file mode 100644 index adaf403a..00000000 --- a/.github/workflows/merge-dependabot-reusable.yaml +++ /dev/null @@ -1,135 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to you under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -name: merge-dependabot-reusable - -on: - workflow_call: - inputs: - java-version: - description: The Java compiler version - default: 17 - type: string - maven-args: - description: Additional Maven arguments - type: string - secrets: - GPG_SECRET_KEY: - description: GPG secret key for signing commits - required: true - -env: - MAVEN_ARGS: ${{ inputs.maven-args }} - -jobs: - - merge-dependabot: - - runs-on: ubuntu-latest - - steps: - - - name: Fetch metadata - id: dependabot-metadata - uses: dependabot/fetch-metadata@08eff52bf64351f401fb50d4972fa95b9f2c2d1b # 2.4.0 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Find dependency attributes - shell: bash - env: - DEPENDENCY_NAMES: ${{ steps.dependabot-metadata.outputs.dependency-names }} - DEPENDENCY_VERSION: ${{ steps.dependabot-metadata.outputs.new-version }} - run: | - DEPENDENCY_NAME=$(echo "$DEPENDENCY_NAMES" | tr "," '\n' | head -n 1) - cat >> $GITHUB_ENV << EOF - DEPENDENCY_NAME=$DEPENDENCY_NAME - DEPENDENCY_VERSION=$DEPENDENCY_VERSION - EOF - - - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 - with: - ref: ${{ steps.dependabot-metadata.outputs.target-branch }} - - - name: Download and apply patch - shell: bash - env: - PATCH_URL: ${{ github.event.pull_request.patch_url }} - run: | - wget -O- "$PATCH_URL" | git apply - - - name: Set up Java & GPG - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # 5.0.0 - with: - distribution: zulu - java-version: ${{ inputs.java-version }} - cache: maven - server-id: apache.releases.https - server-username: NEXUS_USERNAME - server-password: NEXUS_PASSWORD - gpg-private-key: ${{ secrets.GPG_SECRET_KEY }} - - - name: Find the release version major - shell: bash - run: | - RELEASE_VERSION_MAJOR=$(./mvnw \ - --non-recursive --quiet --batch-mode \ - -DforceStdout=true \ - -Dexpression=parsedVersion.majorVersion \ - build-helper:parse-version help:evaluate \ - | tail -n 1) - echo "RELEASE_VERSION_MAJOR=$RELEASE_VERSION_MAJOR" >> $GITHUB_ENV - - - name: Create changelog entry - shell: bash - env: - PR_URL: ${{ github.event.pull_request.html_url }} - PR_ID: ${{ github.event.pull_request.number }} - run: | - if [ -d "src/changelog" ]; then - RELEASE_CHANGELOG_FILEPATH="src/changelog/.${RELEASE_VERSION_MAJOR}.x.x" - SAFE_DEPENDENCY_NAME=$(echo "$DEPENDENCY_NAME" | tr "[:upper:]" "[:lower:]" | sed -r 's/[^a-z0-9]/_/g' | sed -r 's/_+/_/g') - CHANGELOG_ENTRY_FILEPATH="$RELEASE_CHANGELOG_FILEPATH/update_${SAFE_DEPENDENCY_NAME}.xml" - mkdir -p $(dirname "$CHANGELOG_ENTRY_FILEPATH") - cat > "$CHANGELOG_ENTRY_FILEPATH" << EOF - - - - Update \`$DEPENDENCY_NAME\` to version \`$DEPENDENCY_VERSION\` - - EOF - fi - - - name: Add & commit changes - shell: bash - env: - PR_ID: ${{ github.event.pull_request.number }} - PR_BRANCH: ${{ github.head_ref }} - run: | - git add . - git config user.name "ASF Logging Services RM" - git config user.email private@logging.apache.org - git commit -S -a -m "Update \`$DEPENDENCY_NAME\` to version \`$DEPENDENCY_VERSION\` (#$PR_ID)" - # Pushing the same commit to the Dependabot and main branch closes the PR - git push -f origin "HEAD:$PR_BRANCH" - # Allow for GitHub to realize that the PR branch changed - sleep 5 - git push origin diff --git a/.github/workflows/merge-dependabot.yaml b/.github/workflows/merge-dependabot.yaml deleted file mode 100644 index 2d611cc1..00000000 --- a/.github/workflows/merge-dependabot.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to you under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -name: merge-dependabot - -on: - pull_request_target: - paths-ignore: - - "**.adoc" - - "**.md" - - "**.txt" - -permissions: read-all - -jobs: - - build: - if: github.repository == 'apache/logging-parent' && github.event_name == 'pull_request_target' && github.actor == 'dependabot[bot]' - uses: ./.github/workflows/build-reusable.yaml - - merge-dependabot: - needs: build - uses: ./.github/workflows/merge-dependabot-reusable.yaml - permissions: - contents: write # to push changelog commits - pull-requests: write # to close the PR - secrets: - GPG_SECRET_KEY: ${{ secrets.LOGGING_GPG_SECRET_KEY }} # to sign commits diff --git a/.github/workflows/scorecards-analysis-reusable.yaml b/.github/workflows/scorecards-analysis-reusable.yaml deleted file mode 100644 index 8094b6cb..00000000 --- a/.github/workflows/scorecards-analysis-reusable.yaml +++ /dev/null @@ -1,65 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to you under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -name: scorecards-analysis - -on: - workflow_call: - -# Explicitly drop all permissions inherited from the caller for security. -# Reference: https://docs.github.com/en/actions/sharing-automations/reusing-workflows#access-and-permissions -permissions: { } - -jobs: - - analysis: - name: "Scorecards analysis" - runs-on: ubuntu-latest - # Permissions required to publish Security Alerts - permissions: - security-events: write - - steps: - - - name: "Checkout code" - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 - with: - persist-credentials: false - - - name: "Run analysis" - uses: ossf/scorecard-action@05b42c624433fc40578a4040d5cf5e36ddca8cde # 2.4.2 - with: - results_file: results.sarif - results_format: sarif - # A read-only PAT token, which is sufficient for the action to function. - # The relevant discussion: https://github.com/ossf/scorecard-action/issues/188 - repo_token: ${{ secrets.GITHUB_TOKEN }} - # Publish the results for public repositories to enable scorecard badges. - # For more details: https://github.com/ossf/scorecard-action#publishing-results - publish_results: true - - - name: "Upload artifact" - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # 4.6.2 - with: - name: SARIF file - path: results.sarif - retention-days: 5 - - - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # 3.29.0 - with: - sarif_file: results.sarif diff --git a/.github/workflows/verify-reproducibility-reusable.yaml b/.github/workflows/verify-reproducibility-reusable.yaml deleted file mode 100644 index a743210e..00000000 --- a/.github/workflows/verify-reproducibility-reusable.yaml +++ /dev/null @@ -1,115 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to you under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -name: verify-reproducibility-reusable - -on: - workflow_call: - inputs: - java-version: - description: The Java compiler version - default: 17 - type: string - maven-args: - description: Additional Maven arguments - type: string - nexus-url: - description: The URL of the reference Nexus repository - type: string - runs-on: - description: The type of runners to use as JSON array - default: '["ubuntu-latest"]' - type: string - -env: - MAVEN_ARGS: ${{ inputs.maven-args }} - NEXUS_URL: ${{ inputs.nexus-url }} - -# Explicitly drop all permissions inherited from the caller for security. -# Reference: https://docs.github.com/en/actions/sharing-automations/reusing-workflows#access-and-permissions -permissions: { } - -jobs: - - build: - - runs-on: ${{ matrix.os }} - - strategy: - matrix: - os: ${{ fromJSON(inputs.runs-on) }} - - steps: - - - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 - with: - ref: ${{ github.ref }} - - - name: Set up Java - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # 5.0.0 - with: - distribution: zulu - java-version: ${{ inputs.java-version }} - - # - # Generates a cache key prefix to enable partial cache hits. - # If there's no exact match for the full cache key, any cache with this prefix can be used as a fallback. - # To avoid unbounded cache growth, the prefix includes the current month, - # ensuring a new cache is started each month. - # - - name: Compute Cache Key Prefix - shell: bash - run: | - date +"CACHE_KEY=verify-reproducibility-%Y-%m" >> $GITHUB_ENV - - # - # Configures caching for the local Maven repository. - # Uses a custom cache key to isolate artifacts built in this workflow, - # preventing reproducibility results from being affected by cached outputs from other workflows. - # - - name: Set up Maven Cache - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # 4.2.4 - with: - path: ~/.m2/repository - key: "${{ env.CACHE_KEY }}-${{ runner.os }}-${{ hashFiles('**/pom.xml') }}" - restore-keys: | - ${{ env.CACHE_KEY }}-${{ runner.os }}- - - # `clean verify artifact:compare` is required to generate the build reproducibility report. - # For details, see: https://maven.apache.org/guides/mini/guide-reproducible-builds.html#how-to-test-my-maven-build-reproducibility - - name: Verify build reproducibility - shell: bash - run: | - ./mvnw \ - --show-version --batch-mode --errors --no-transfer-progress \ - -DskipTests=true \ - -Dreference.repo="${NEXUS_URL}" \ - clean verify artifact:compare - - # Upload reproducibility results if the build fails. - - name: Upload reproducibility results - if: failure() - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # 4.6.2 - with: - name: reproducibility-${{matrix.os}}-${{github.run_number}}-${{github.run_attempt}} - path: | - **/target/bom.xml - **/target/*.buildcompare - **/target/*.jar - **/target/*.zip - **/target/reference/** diff --git a/package-lock.json b/package-lock.json index 2437c379..b06750a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -703,20 +703,6 @@ "node": ">= 0.4" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", diff --git a/pom.xml b/pom.xml index 4dc09189..8c3dca4f 100644 --- a/pom.xml +++ b/pom.xml @@ -630,6 +630,8 @@ .github/ISSUE_TEMPLATE/*.md .github/pull_request_template.md + + .logging-parent-bom-activator diff --git a/src/changelog/.12.x.x/gha-branch.xml b/src/changelog/.12.x.x/gha-branch.xml new file mode 100644 index 00000000..69313281 --- /dev/null +++ b/src/changelog/.12.x.x/gha-branch.xml @@ -0,0 +1,9 @@ + + + + Move reusable GitHub Actions workflows from `main` to the `gha/v0` branch. + + diff --git a/src/site/antora/antora.tmpl.yml b/src/site/antora/antora.tmpl.yml index c6e6fba4..e92c88c9 100644 --- a/src/site/antora/antora.tmpl.yml +++ b/src/site/antora/antora.tmpl.yml @@ -38,6 +38,7 @@ version: ~ start_page: index.adoc asciidoc: attributes: + project-gha-version: "gha/v0" project-github-url: "${scm.url}" project-version: "${site-project.version}" project-name: Logging Parent diff --git a/src/site/antora/antora.yml b/src/site/antora/antora.yml index 63faef9b..479dd804 100644 --- a/src/site/antora/antora.yml +++ b/src/site/antora/antora.yml @@ -38,6 +38,7 @@ version: ~ start_page: index.adoc asciidoc: attributes: + project-gha-version: "gha/v0" project-github-url: "https://github.com/awesome/project" project-version: "1.2.3" project-name: Logging Parent diff --git a/src/site/antora/modules/ROOT/examples/build.yaml b/src/site/antora/modules/ROOT/examples/build.yaml index 216b0060..30723edf 100644 --- a/src/site/antora/modules/ROOT/examples/build.yaml +++ b/src/site/antora/modules/ROOT/examples/build.yaml @@ -32,7 +32,7 @@ jobs: # tag::build[] build: - uses: apache/logging-parent/.github/workflows/build-reusable.yaml@rel/{project-version} + uses: apache/logging-parent/.github/workflows/build-reusable.yaml@{project-gha-version} secrets: DV_ACCESS_TOKEN: ${{ startsWith(github.ref_name, 'release/') && '' || secrets.DEVELOCITY_ACCESS_KEY }} with: @@ -45,7 +45,7 @@ jobs: deploy-snapshot: needs: build if: github.repository == 'apache/logging-log4j2' && github.ref_name == '2.x' - uses: apache/logging-parent/.github/workflows/deploy-snapshot-reusable.yaml@rel/{project-version} + uses: apache/logging-parent/.github/workflows/deploy-snapshot-reusable.yaml@{project-gha-version} # Secrets for deployments secrets: NEXUS_USERNAME: ${{ secrets.NEXUS_USER }} @@ -56,7 +56,7 @@ jobs: deploy-release: needs: build if: github.repository == 'apache/logging-log4j2' && startsWith(github.ref_name, 'release/') - uses: apache/logging-parent/.github/workflows/deploy-release-reusable.yaml@rel/{project-version} + uses: apache/logging-parent/.github/workflows/deploy-release-reusable.yaml@{project-gha-version} # Secrets for deployments secrets: GPG_SECRET_KEY: ${{ secrets.LOGGING_GPG_SECRET_KEY }} @@ -75,7 +75,7 @@ jobs: verify-reproducibility-snapshot: needs: deploy-snapshot name: "verify-reproducibility (${{ needs.deploy-snapshot.outputs.project-version }})" - uses: apache/logging-parent/.github/workflows/verify-reproducibility-reusable.yaml@rel/{project-version} + uses: apache/logging-parent/.github/workflows/verify-reproducibility-reusable.yaml@{project-gha-version} with: # Reference repository nexus-url: https://repository.apache.org/content/groups/snapshots @@ -87,7 +87,7 @@ jobs: verify-reproducibility-release: needs: deploy-release name: "verify-reproducibility (${{ needs.deploy-release.outputs.project-version }})" - uses: apache/logging-parent/.github/workflows/verify-reproducibility-reusable.yaml@rel/{project-version} + uses: apache/logging-parent/.github/workflows/verify-reproducibility-reusable.yaml@{project-gha-version} with: # Reference repository nexus-url: ${{ needs.deploy-release.outputs.nexus-url }} diff --git a/src/site/antora/modules/ROOT/examples/deploy-site.yaml b/src/site/antora/modules/ROOT/examples/deploy-site.yaml index 42b6b82c..f9c0cd06 100644 --- a/src/site/antora/modules/ROOT/examples/deploy-site.yaml +++ b/src/site/antora/modules/ROOT/examples/deploy-site.yaml @@ -36,7 +36,7 @@ jobs: # tag::snapshot[] deploy-site-stg: if: github.repository == 'apache/logging-log4j2' && github.ref_name == '2.x' - uses: apache/logging-parent/.github/workflows/deploy-site-reusable.yaml@rel/{project-version} + uses: apache/logging-parent/.github/workflows/deploy-site-reusable.yaml@{project-gha-version} # Secrets for committing the generated site secrets: GPG_SECRET_KEY: ${{ secrets.LOGGING_GPG_SECRET_KEY }} @@ -56,7 +56,7 @@ jobs: # tag::production[] deploy-site-pro: if: github.repository == 'apache/logging-log4j2' && github.ref_name == '2.x-site-pro' - uses: apache/logging-parent/.github/workflows/deploy-site-reusable.yaml@rel/12.1.0 + uses: apache/logging-parent/.github/workflows/deploy-site-reusable.yaml@{project-gha-version} # Secrets for committing the generated site secrets: GPG_SECRET_KEY: ${{ secrets.LOGGING_GPG_SECRET_KEY }} @@ -87,7 +87,7 @@ jobs: deploy-site-rel: needs: export-version - uses: apache/logging-parent/.github/workflows/deploy-site-reusable.yaml@rel/{project-version} + uses: apache/logging-parent/.github/workflows/deploy-site-reusable.yaml@{project-gha-version} # Secrets for committing the generated site secrets: GPG_SECRET_KEY: ${{ secrets.LOGGING_GPG_SECRET_KEY }} diff --git a/src/site/antora/modules/ROOT/nav.adoc b/src/site/antora/modules/ROOT/nav.adoc index c6a4cc12..513c6896 100644 --- a/src/site/antora/modules/ROOT/nav.adoc +++ b/src/site/antora/modules/ROOT/nav.adoc @@ -17,6 +17,7 @@ * xref:features.adoc[] * xref:usage.adoc[] +* xref:workflows.adoc[] * xref:release-notes.adoc[] .Release support diff --git a/src/site/antora/modules/ROOT/pages/features.adoc b/src/site/antora/modules/ROOT/pages/features.adoc index 024e9d95..78580917 100644 --- a/src/site/antora/modules/ROOT/pages/features.adoc +++ b/src/site/antora/modules/ROOT/pages/features.adoc @@ -106,7 +106,7 @@ For example, you can use the snippet below: [source,yaml,subs="+attributes"] ---- build: - uses: apache/logging-parent/.github/workflows/build-reusable.yaml@rel/{project-version} + uses: apache/logging-parent/.github/workflows/build-reusable.yaml@{project-gha-version} secrets: DV_ACCESS_TOKEN: ${{ ! startsWith(github.refname, 'release/') && secrets.DEVELOCITY_ACCESS_KEY }} with: diff --git a/src/site/antora/modules/ROOT/pages/workflows.adoc b/src/site/antora/modules/ROOT/pages/workflows.adoc index e9ed9f90..0761bf00 100644 --- a/src/site/antora/modules/ROOT/pages/workflows.adoc +++ b/src/site/antora/modules/ROOT/pages/workflows.adoc @@ -26,11 +26,10 @@ The Logging Parent project provides the following reusable GitHub Actions workfl * <> * <> * <> -* <> * <> [#build] -== {project-github-url}/blob/main/.github/workflows/build-reusable.yaml[`build-reusable.yaml`] +== {project-github-url}/blob/{project-gha-version}/.github/workflows/build-reusable.yaml[`build-reusable.yaml`] This workflow: @@ -47,7 +46,7 @@ include::example$build.yaml[tag=build,indent=0] ---- [#deploy-snapshot] -== {project-github-url}/blob/main/.github/workflows/deploy-snapshot-reusable.yaml[`deploy-snapshot-reusable.yaml`] +== {project-github-url}/blob/{project-gha-version}/.github/workflows/deploy-snapshot-reusable.yaml[`deploy-snapshot-reusable.yaml`] This workflow deploys SNAPSHOT artifacts. @@ -61,7 +60,7 @@ include::example$build.yaml[tag=deploy-snapshot,indent=0] ---- [#deploy-release] -== {project-github-url}/blob/main/.github/workflows/deploy-release-reusable.yaml[`deploy-release-reusable.yaml`] +== {project-github-url}/blob/{project-gha-version}/.github/workflows/deploy-release-reusable.yaml[`deploy-release-reusable.yaml`] This workflow: @@ -81,7 +80,7 @@ include::example$build.yaml[tag=deploy-release,indent=0] ---- [#verify-reproducibility] -== {project-github-url}/blob/main/.github/workflows/merge-dependabot-reusable.yaml[`verify-reproducibility-reusable.yaml`] +== {project-github-url}/blob/{project-gha-version}/.github/workflows/verify-reproducibility-reusable.yaml[`verify-reproducibility-reusable.yaml`] This workflow verifies the reproducibility of a previous <> or <> workflow. @@ -104,13 +103,8 @@ To verify the reproducibility of a release, you can use: include::example$build.yaml[tag=verify-reproducibility-release,indent=0] ---- -[#merge-dependabot] -== {project-github-url}/blob/main/.github/workflows/merge-dependabot-reusable.yaml[`merge-dependabot-reusable.yaml`] - -Merges Dependabot PRs along with changelog entries. - [#deploy-site] -== {project-github-url}/blob/main/.github/workflows/deploy-site-reusable.yaml[`deploy-site-reusable.yaml`] +== {project-github-url}/blob/{project-gha-version}/.github/workflows/deploy-site-reusable.yaml[`deploy-site-reusable.yaml`] This workflow builds and deploys the website.