This is an automated email from the ASF dual-hosted git repository.

arm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-actions.git

commit 9c213fbcd683f84753a3a290c852dcee017e915e
Author: Alastair McFarlane <[email protected]>
AuthorDate: Tue Mar 10 14:03:26 2026 +0000

    Fix name of workflow
---
 .github/workflows/distribute-maven.yml | 300 +++++++++++++++++++++++++++++++++
 1 file changed, 300 insertions(+)

diff --git a/.github/workflows/distribute-maven.yml 
b/.github/workflows/distribute-maven.yml
new file mode 100644
index 0000000..e425a9c
--- /dev/null
+++ b/.github/workflows/distribute-maven.yml
@@ -0,0 +1,300 @@
+# 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: Distribute from ATR to RAO Maven Staging
+run-name: "${{ inputs.atr-id }}"
+
+on:
+  workflow_dispatch:
+    inputs:
+      atr-id:
+        description: 'Run ID (from ATR)'
+        required: true
+      asf-uid:
+        description: 'Originating user ID'
+        required: true
+      project:
+        description: 'Project in ATR to pull files from'
+        required: true
+      version:
+        description: 'Version in ATR to pull files from'
+        required: true
+      phase:
+        description: 'Expected release phase in ATR'
+        required: true
+      distribution-owner-namespace:
+        description: "Owner namespace"
+        required: true
+      distribution-package:
+        description: 'Package/project name in ATR'
+        required: true
+      distribution-version:
+        description: 'Distribution version'
+        required: true
+      atr-host:
+        description: 'ATR host (for testing purposes)'
+        required: false
+        default: 'release-test.apache.org'
+      ssh-port:
+        description: 'SSH port for ATR (for testing purposes)'
+        required: false
+        default: '2222'
+
+jobs:
+  distribute:
+    permissions:
+      id-token: write
+      contents: read
+    runs-on: ubuntu-latest
+    env:
+      ATR_HOST: ${{ inputs.atr-host }}
+      SSH_PORT: ${{ inputs.ssh-port }}
+      WORKFLOW: distribute-maven.yml
+      NJORD_STORE: atr-deployment-${{ inputs.distribution-package }}-${{ 
inputs.distribution-version }}
+      RAO_USERNAME: ${{ secrets.RAO_USERNAME }}
+      RAO_PASSWORD: ${{ secrets.RAO_PASSWORD }}
+      TAG_NAME: "${{ inputs.distribution-owner-namespace }}-${{ 
inputs.distribution-package }}-${{ inputs.distribution-version }}"
+    steps:
+      - name: Sleep for 5 seconds
+        run: sleep 5s
+        shell: bash
+      - name: Create settings.xml
+        run: |
+            mkdir -p ~/.m2
+            cat > ~/.m2/settings.xml << EOF
+            <?xml version="1.0" encoding="UTF-8"?>
+            <settings>
+              <pluginGroups>
+                <pluginGroup>eu.maveniverse.maven.plugins</pluginGroup>
+              </pluginGroups>
+              <servers>
+                <server>
+                  <id>rao3</id>
+                  <username>${RAO_USERNAME}</username>
+                  <password>${RAO_PASSWORD}</password>
+                  <configuration>
+                    <njord.publisher>sonatype-nx3</njord.publisher>
+                    
<njord.publisher.sonatype-nx3.baseUrl>https://repository.apache.org:4443/</njord.publisher.sonatype-nx3.baseUrl>
+                  </configuration>
+                </server>
+              </servers>
+            </settings>
+            EOF
+
+      - name: Set up JDK 17
+        uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e
+        with:
+          java-version: '17'
+          distribution: 'temurin'
+          overwrite-settings: false
+      - name: Set up Maven 3.9+
+        uses: stCarolas/setup-maven@d6af6abeda15e98926a57b5aa970a96bb37f97d1
+        with:
+          maven-version: 3.9.12
+
+      - name: Create a GitHub OIDC JWT
+        id: create-github-jwt
+        shell: bash
+        run: |
+          set -euo pipefail
+          url="${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=atr-test-v1"
+          jwt="$(curl -sS --fail-with-body -H "Authorization: bearer 
${ACTIONS_ID_TOKEN_REQUEST_TOKEN}" "$url" | jq -r .value)"
+          echo "::add-mask::$jwt"
+          echo "jwt=$jwt" >> "$GITHUB_OUTPUT"
+
+      - name: Generate an ephemeral SSH key
+        id: generate-ssh-key
+        shell: bash
+        run: |
+          set -euxo pipefail
+          ssh-keygen -t ed25519 -N "" -f "$RUNNER_TEMP/ssh_key"
+          echo "ssh_private_key_path=$RUNNER_TEMP/ssh_key" >> "$GITHUB_OUTPUT"
+          echo "ssh_public_key=$(cat "$RUNNER_TEMP/ssh_key.pub")" >> 
"$GITHUB_OUTPUT"
+
+      - name: Register the ephemeral SSH key with ATR
+        shell: bash
+        run: |
+          set -euxo pipefail
+          case "${ATR_HOST}" in
+            *.apache.org) ;;
+            *) echo "atr-host must match *.apache.org"; exit 1;;
+          esac
+          jq -n --arg publisher github \
+                --arg jwt "$JWT" \
+                --arg key "$SSH_PUBLIC_KEY" \
+                --arg uid "$INPUTS_ASF_UID" \
+                --arg phase "$INPUTS_PHASE" \
+                --arg project_name "$INPUTS_PROJECT" \
+                --arg version "$INPUTS_VERSION" \
+                '{publisher:$publisher, jwt:$jwt, ssh_key:$key, asf_uid:$uid, 
project_name:$project_name, phase:$phase, version:$version}' |
+            curl -sS --fail-with-body -X POST -H 'Content-Type: 
application/json' -d @- \
+              "https://${ATR_HOST}/api/distribute/ssh/register";
+        env:
+          JWT: ${{ steps.create-github-jwt.outputs.jwt }}
+          SSH_PUBLIC_KEY: ${{ steps.generate-ssh-key.outputs.ssh_public_key }}
+          INPUTS_PROJECT: ${{ inputs.project }}
+          INPUTS_VERSION: ${{ inputs.version }}
+          INPUTS_PHASE: ${{ inputs.phase }}
+          INPUTS_ASF_UID: ${{ inputs.asf-uid }}
+
+      - name: Report status back to ATR
+        shell: bash
+        run: |
+          set -euxo pipefail
+          jq -n --arg publisher github \
+                --arg jwt "$JWT" \
+                --arg workflow "$WORKFLOW" \
+                --arg run_id $RUN_ID \
+                --arg project_name "$INPUTS_PROJECT" \
+                '{publisher:$publisher, jwt:$jwt, workflow:$workflow, 
run_id:$run_id, project_name:$project_name, status:"in_progress", 
message:"Compiling distribution"}' |
+            curl -sS --fail-with-body -X POST -H 'Content-Type: 
application/json' -d @- \
+              "https://${ATR_HOST}/api/distribute/task/status";
+        env:
+          JWT: ${{ steps.create-github-jwt.outputs.jwt }}
+          RUN_ID: ${{ github.run_id }}
+          INPUTS_PROJECT: ${{ inputs.project }}
+
+      - name: Download from ATR using rsync
+        shell: bash
+        run: |
+          set -euxo pipefail
+          if ! [[ "${SSH_PORT}" =~ ^[0-9]+$ ]]
+          then
+            echo "::error::ssh-port must be an integer"
+            exit 1
+          fi
+          : "${INPUTS_DISTRIBUTION_PACKAGE:?package is required}"
+          : "${INPUTS_VERSION:?version is required}"
+          command -v rsync > /dev/null || { sudo apt-get update -y && sudo 
apt-get install -y rsync; }
+          mkdir stg
+          rsync -av \
+            -e "ssh -p 2222 -i $SSH_PRIVATE_KEY_PATH -o 
StrictHostKeyChecking=accept-new" \
+            -- \
+            "github@${ATR_HOST}:/${INPUTS_PROJECT}/${INPUTS_VERSION}/maven/" 
./stg/
+        env:
+          INPUTS_PROJECT: ${{ inputs.project }}
+          INPUTS_VERSION: ${{ inputs.version }}
+          INPUTS_DISTRIBUTION_OWNER_NAMESPACE: ${{ 
inputs.distribution-owner-namespace }}
+          INPUTS_DISTRIBUTION_PACKAGE: ${{ inputs.distribution-package }}
+          # INPUTS_DETAILS: ${{ inputs.details }}
+          SSH_PRIVATE_KEY_PATH: ${{ 
steps.generate-ssh-key.outputs.ssh_private_key_path }}
+
+      - name: Get store ID and publish
+        shell: bash
+        run: |
+          set -euxo pipefail
+          echo "Importing Njord bundle"
+          NJORD_STORE=$(mvn njord:import-all -Dnjord.dir=./stg | sed -En 
's/.*Imported to (.+) staged.*/\1/p')
+          echo "Validating store: $NJORD_STORE"
+          mvn njord:validate -Dnjord.store=$NJORD_STORE 
-Dnjord.publisher=sonatype-cp -Dnjord.details=true -q | sed -n '/Central 
Requirements/,/ArtifactStore.*failed validation/{/ArtifactStore.*failed 
validation/!s/^\[ERROR\] *//p}' | tee .err
+          echo "Publishing store: $NJORD_STORE"
+          mvn njord:publish -Dnjord.store=$NJORD_STORE
+          mvn njord:drop -Dnjord.store=$NJORD_STORE
+        env:
+          INPUTS_DISTRIBUTION_OWNER_NAMESPACE: ${{ 
inputs.distribution-owner-namespace }}
+          INPUTS_DISTRIBUTION_PACKAGE: ${{ inputs.distribution-package }}
+          INPUTS_DISTRIBUTION_VERSION: ${{ inputs.distribution-version }}
+
+      - name: Report status back to ATR
+        shell: bash
+        run: |
+          set -euxo pipefail
+          jq -n --arg publisher github \
+                --arg jwt "$JWT" \
+                --arg workflow "$WORKFLOW" \
+                --arg run_id $RUN_ID \
+                --arg project_name "$INPUTS_PROJECT" \
+                '{publisher:$publisher, jwt:$jwt, workflow:$workflow, 
run_id:$run_id, project_name:$project_name, status:"in_progress", 
message:"Recording distribution"}' |
+            curl -sS --fail-with-body -X POST -H 'Content-Type: 
application/json' -d @- \
+              "https://${ATR_HOST}/api/distribute/task/status";
+        env:
+          JWT: ${{ steps.create-github-jwt.outputs.jwt }}
+          RUN_ID: ${{ github.run_id }}
+          INPUTS_PROJECT: ${{ inputs.project }}
+
+      - name: Record distribution on ATR
+        shell: bash
+        run: |
+          set -euxo pipefail
+          DETAILS_JSON=false
+          [ "${INPUTS_DETAILS}" = "true" ] && DETAILS_JSON=true
+          jq -n --arg publisher github \
+                --arg jwt "$JWT" \
+                --arg uid "$INPUTS_ASF_UID" \
+                --arg project "$INPUTS_PROJECT" \
+                --arg version "$INPUTS_VERSION" \
+                --arg phase "$INPUTS_PHASE" \
+                --arg platform "MAVEN" \
+                --arg distribution_owner_namespace 
"$INPUTS_DISTRIBUTION_OWNER_NAMESPACE" \
+                --arg distribution_package "$INPUTS_DISTRIBUTION_PACKAGE" \
+                --arg distribution_version "$INPUTS_DISTRIBUTION_VERSION" \
+                --argjson details "$DETAILS_JSON" \
+                '{publisher:$publisher, jwt:$jwt, asf_uid:$uid, 
project:$project, version:$version, phase:$phase, platform:$platform, 
distribution_owner_namespace:$distribution_owner_namespace, 
distribution_package:$distribution_package, 
distribution_version:$distribution_version, staging:false, details:$details}' |
+            curl -sS --fail-with-body -X POST -H 'Content-Type: 
application/json' -d @- \
+              "https://${ATR_HOST}/api/distribute/record_from_workflow";
+        env:
+          INPUTS_PROJECT: ${{ inputs.project }}
+          INPUTS_VERSION: ${{ inputs.version }}
+          INPUTS_PHASE: ${{ inputs.phase }}
+          INPUTS_ASF_UID: ${{ inputs.asf-uid }}
+          INPUTS_DISTRIBUTION_OWNER_NAMESPACE: ${{ 
inputs.distribution-owner-namespace }}
+          INPUTS_DISTRIBUTION_PACKAGE: ${{ inputs.distribution-package }}
+          INPUTS_DISTRIBUTION_VERSION: ${{ inputs.distribution-version }}
+          INPUTS_DETAILS: "false"
+          JWT: ${{ steps.create-github-jwt.outputs.jwt }}
+
+      - name: Report status back to ATR
+        shell: bash
+        if: failure()
+        run: |
+          set -euxo pipefail
+          jq -n --arg publisher github \
+                --arg jwt "$JWT" \
+                --arg workflow "$WORKFLOW" \
+                --arg run_id $RUN_ID \
+                --arg project_name "$INPUTS_PROJECT" \
+                --arg err "$([ -f .err ] && [ -s .err ] && echo "Build failed: 
$(cat .err)" || echo "Github workflow failed")" \
+                --arg status "failed" \
+                '{publisher:$publisher, jwt:$jwt, workflow:$workflow, 
run_id:$run_id, project_name:$project_name, status:$status, message:$err}' |
+            curl -sS --fail-with-body -X POST -H 'Content-Type: 
application/json' -d @- \
+              "https://${ATR_HOST}/api/distribute/task/status";
+        env:
+          JWT: ${{ steps.create-github-jwt.outputs.jwt }}
+          RUN_ID: ${{ github.run_id }}
+          STATUS: ${{ job.status }}
+          INPUTS_PROJECT: ${{ inputs.project }}
+
+
+      - name: Report status back to ATR
+        shell: bash
+        if: success()
+        run: |
+          set -euxo pipefail
+          jq -n --arg publisher github \
+                --arg jwt "$JWT" \
+                --arg workflow "$WORKFLOW" \
+                --arg run_id $RUN_ID \
+                --arg project_name "$INPUTS_PROJECT" \
+                --arg status "success" \
+                '{publisher:$publisher, jwt:$jwt, workflow:$workflow, 
run_id:$run_id, project_name:$project_name, status:$status, message:"GitHub 
workflow succeeded"}' |
+            curl -sS --fail-with-body -X POST -H 'Content-Type: 
application/json' -d @- \
+              "https://${ATR_HOST}/api/distribute/task/status";
+        env:
+          JWT: ${{ steps.create-github-jwt.outputs.jwt }}
+          RUN_ID: ${{ github.run_id }}
+          STATUS: ${{ job.status }}
+          INPUTS_PROJECT: ${{ inputs.project }}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to