From 6a4d331de9c6a48e53efaec32bc896bdebf81ea4 Mon Sep 17 00:00:00 2001 From: ndr_brt Date: Thu, 18 Jan 2024 09:15:45 +0100 Subject: [PATCH] feat: add release workflow (#16) --- .github/workflows/release.yaml | 125 +++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 .github/workflows/release.yaml diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..fc5d35a --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,125 @@ +name: Release +on: + workflow_dispatch: + inputs: + version: + description: Semantic Version string to use for this release + required: true + +env: + INPUT-VERSION: ${{ github.event.inputs.version || inputs.version }} + + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + + Secrets-Presence: + name: "Check for required credentials" + runs-on: ubuntu-latest + outputs: + HAS_GH_PAT: ${{ steps.secrets-presence.outputs.HAS_GH_PAT }} + HAS_WEBHOOK: ${{ steps.secrets-presence.outputs.HAS_WEBHOOK }} + steps: + - name: Check whether secrets exist + id: secrets-presence + run: | + [ ! -z "${{ secrets.ORG_GITHUB_BOT_USER }}" ] && + [ ! -z "${{ secrets.ORG_GITHUB_BOT_TOKEN }}" ] && echo "HAS_GH_PAT=true" >> $GITHUB_OUTPUT + [ ! -z "${{ secrets.DISCORD_WEBHOOK_GITHUB }}" ] && echo "HAS_WEBHOOK=true" >> $GITHUB_OUTPUT + exit 0 + + Determine-Version: + # this looks to be necessary because some constructs as "with" are not able to get values from env + runs-on: ubuntu-latest + outputs: + VERSION: ${{ steps.get-version.outputs.VERSION }} + steps: + - name: "Extract version" + id: get-version + run: echo "VERSION=${{ env.INPUT_VERSION }}" >> "$GITHUB_OUTPUT" + + Run-All-Tests: + name: "Run tests" + runs-on: ubuntu-latest + needs: [ Secrets-Presence, Determine-Version ] + if: | + needs.Secrets-Presence.outputs.HAS_GH_PAT + strategy: + fail-fast: false + matrix: + test-def: [ { repo: "runtime-metamodel", workflowfile: "ci.yaml" }, + { repo: "gradleplugins", workflowfile: "test.yaml" }, + { repo: "connector", workflowfile: "verify.yaml" }, + { repo: "identityhub", workflowfile: "verify.yaml" }, + { repo: "federatedcatalog", workflowfile: "verify.yaml" }, + { repo: "technology-azure", workflowfile: "verify.yaml" }, + { repo: "technology-aws", workflowfile: "verify.yaml" }, + { repo: "technology-gcp", workflowfile: "verify.yaml" } ] + steps: + - uses: actions/checkout@v3 + - name: "Log version" + run: | + echo "Will build version ${{ needs.Determine-Version.outputs.VERSION }}" + + - name: "Run test for ${{ matrix.test-def.repo }}" + run: | + chmod +x ./scripts/github_action.sh + ./scripts/github_action.sh "eclipse-edc" "${{ matrix.test-def.repo }}" "${{ matrix.test-def.workflowfile}}" "" "${{ secrets.ORG_GITHUB_BOT_USER }}" "${{ secrets.ORG_GITHUB_BOT_TOKEN }}" + + Publish-Components: + needs: [ Determine-Version, Run-All-Tests ] + uses: eclipse-edc/Release/.github/workflows/publish-all-in-one.yaml@main + with: + version: ${{ needs.Determine-Version.outputs.VERSION }} + secrets: inherit + + Release-Components: + name: "Release Components" + runs-on: ubuntu-latest + needs: [ Determine-Version, Publish-Components ] + if: | + needs.Secrets-Presence.outputs.HAS_GH_PAT + strategy: + fail-fast: false + matrix: + test-def: [ { repo: "runtime-metamodel", workflowfile: "release-rm.yaml", versionfield: "edc_version" }, + { repo: "gradleplugins", workflowfile: "release-all-java.yaml", versionfield: "metamodel_version" }, + { repo: "connector", workflowfile: "release-edc.yaml", versionfield: "edc_version" }, + { repo: "identityhub", workflowfile: "release-identityhub.yaml", versionfield: "ih_version" }, + { repo: "federatedcatalog", workflowfile: "release-fcc.yaml", versionfield: "edc_version" }, + { repo: "technology-azure", workflowfile: "release-tech-az.yaml", versionfield: "edc_version" }, + { repo: "technology-aws", workflowfile: "release-tech-aws.yaml", versionfield: "edc_version" }, + { repo: "technology-gcp", workflowfile: "release-tech-gcp.yaml", versionfield: "edc_version" } ] + steps: + - uses: actions/checkout@v3 + - name: "Log version" + run: | + echo "Will release version ${{ needs.Determine-Version.outputs.VERSION }}" + + - name: "Release ${{ matrix.test-def.repo }}" + run: | + chmod +x ./scripts/github_action.sh + ./scripts/github_action.sh "eclipse-edc" "${{ matrix.test-def.repo }}" "${{ matrix.test-def.workflowfile}}" "{\"${{ matrix.test-def.versionfield }}\": \"${{ needs.Determine-Version.outputs.VERSION }}\"}" "${{ secrets.ORG_GITHUB_BOT_USER }}" "${{ secrets.ORG_GITHUB_BOT_TOKEN }}" + + - name: "Publish new SNAPSHOT version for ${{ matrix.test-def.repo }}" + run: | + chmod +x ./scripts/github_action.sh + ./scripts/github_action.sh "eclipse-edc" "${{ matrix.test-def.repo }}" "trigger_snapshot.yml" "" "${{ secrets.ORG_GITHUB_BOT_USER }}" "${{ secrets.ORG_GITHUB_BOT_TOKEN }}" + + Post-To-Discord: + needs: [ Publish-Components, Determine-Version, Secrets-Presence ] + if: "needs.Secrets-Presence.outputs.HAS_WEBHOOK && always()" + runs-on: ubuntu-latest + steps: + - uses: sarisia/actions-status-discord@v1 + name: "Invoke discord webhook" + with: + webhook: ${{ secrets.DISCORD_WEBHOOK_GITHUB }} + # if the publishing is skipped, that means the preceding test run failed + status: ${{ needs.Publish-Components.result == 'skipped' && 'Failure' || needs.Publish-Components.result }} + title: "Nightly Build" + description: "Build and publish ${{ needs.Determine-Version.outputs.VERSION }}" + username: GitHub Actions