diff --git a/.github/workflows/bump-implementations.yml b/.github/workflows/bump-implementations.yml new file mode 100644 index 00000000..a5f40314 --- /dev/null +++ b/.github/workflows/bump-implementations.yml @@ -0,0 +1,67 @@ +name: Test Spec Implementation Repos + +# Parse the CI output status and make a markdown summary + +# TODO: +# - make the pipeline ignore failures so devs dont ignore the CI checks +# - add a step to add a comment summary with the failures in the PR, so PRs can act accordingly +# - add a step to automate issue creation for each failure (or update existing one) + +on: + push: + branches: + - leordev/test-implementations + tags: + - "v*.*.*" + workflow_dispatch: + inputs: + tag: + description: "Tag (must follow pattern vN.N.N)" + required: true + default: "v1.0.0" + type: string + +jobs: + test: + strategy: + fail-fast: false + matrix: + include: + - repo: tbdex-js + ci_file: integrity-check.yml + spec_path: tbdex + job_step: test-with-node;Run tests + # - repo: tbdex-swift + # ci_file: ci.yml + # spec_path: Tests/tbDEXTestVectors/tbdex-spec + # job_step: build-and-test;Run tests + # - repo: tbdex-kt + # ci_file: ci.yml + # spec_path: tbdex + # job_step: build-test-deploy-snapshot-ubuntu;Build, Test + # - repo: tbdex-rs + # ci_file: ci.yml + # spec_path: tbdex + # job_step: build-test-deploy-snapshot-ubuntu;Build, Test + + outputs: + tbdex-js: ${{ steps.output.outputs.tbdex-js }} + tbdex-swift: ${{ steps.output.outputs.tbdex-swift }} + tbdex-kt: ${{ steps.output.outputs.tbdex-kt }} + tbdex-rs: ${{ steps.output.outputs.tbdex-rs }} + + runs-on: ubuntu-latest + steps: + - name: Get workflow tag + id: get-tag + run: | + TAG=${{ github.event.inputs.tag || github.ref_name }} + echo "Processing tag: $TAG" + + # Validate tag format + if ! [[ $TAG =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Error: Tag '$TAG' is not in the required format vN.N.N" + exit 1 + fi + + echo "TAG=${TAG}" >> $GITHUB_OUTPUT diff --git a/.github/workflows/test-implementations.yml b/.github/workflows/test-implementations.yml index 222cfce7..093f8045 100644 --- a/.github/workflows/test-implementations.yml +++ b/.github/workflows/test-implementations.yml @@ -57,158 +57,158 @@ jobs: owner: TBD54566975 repositories: ${{ matrix.repo }} - - name: Checkout spec repository - uses: actions/checkout@v4 - with: - token: ${{ steps.app-token.outputs.token }} - repository: TBD54566975/${{ matrix.repo }} - ref: main - submodules: true - # persist-credentials: false - - - name: Setup Spec values - id: spec-vals - run: | - SHA="${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}" - echo "SPEC_SHORT_SHA=${SHA:0:7}" >> $GITHUB_OUTPUT - echo "SPEC_SHA=$SHA" >> $GITHUB_OUTPUT - echo "SPEC_REF=tbd-ci-cd-robot/spec-tests" >> $GITHUB_OUTPUT - - - name: Update spec submodule in ${{ matrix.repo }} - env: - SPEC_SHORT_SHA: ${{ steps.spec-vals.outputs.SPEC_SHORT_SHA }} - SPEC_SHA: ${{ steps.spec-vals.outputs.SPEC_SHA }} - SPEC_REF: ${{ steps.spec-vals.outputs.SPEC_REF }} - run: | - REPO_ROOT=$(pwd) - cd ${{ matrix.spec_path }} - git fetch origin ${{ env.SPEC_SHA }} - git checkout ${{ env.SPEC_SHA }} - cd $REPO_ROOT - git checkout -b ${{ env.SPEC_REF }} - git add . - git config user.name "tbd-ci-cd-robot[bot]" - git config user.email "${{ secrets.CICD_ROBOT_GITHUB_APP_ID }}+tbd-ci-cd-robot[bot]@users.noreply.github.com" - git commit -m "Update tbdex spec to ${{ env.SPEC_SHORT_SHA }}" - git push origin ${{ env.SPEC_REF }} -f - - - name: Trigger and wait for ${{ matrix.repo }} CI pipeline - uses: convictional/trigger-workflow-and-wait@v1.6.1 - id: trigger-ci - with: - owner: TBD54566975 - repo: ${{ matrix.repo }} - github_token: ${{ steps.app-token.outputs.token }} - workflow_file_name: ${{ matrix.ci_file }} - ref: ${{ steps.spec-vals.outputs.SPEC_REF }} - wait_interval: 10 - propagate_failure: false - # client_payload: '{}' - # trigger_workflow: true - # wait_workflow: true - - # Read CI status - - name: Read CI Job Status - uses: actions/github-script@v6 - id: read-ci-status - env: - RUN_ID: ${{ steps.trigger-ci.outputs.workflow_id }} - with: - github-token: ${{ steps.app-token.outputs.token }} - script: | - const {data: run} = await github.rest.actions.getWorkflowRun({ - owner: 'TBD54566975', - repo: '${{ matrix.repo }}', - run_id: ${{ env.RUN_ID }}, - }); - console.info({run}) - return run.conclusion - - - id: output - run: | - echo "${{ matrix.repo }}=${{ steps.read-ci-status.outputs.result }}" >> $GITHUB_OUTPUT - - collect-results: - name: Collect Tests Results - needs: test - runs-on: ubuntu-latest - steps: - - name: Collect job results - id: summarize-results - run: | - get_status_emoji() { - if [ "$1" == "success" ]; then - echo "✅" - else - echo "❌" - fi - } - - touch summary.md - - echo "## tbdex Spec Implementation SDKs Test Results" >> summary.md - echo "| Repository | Status |" >> summary.md - echo "|------------|--------|" >> summary.md - echo "|tbdex-js|$(get_status_emoji ${{ needs.test.outputs.tbdex-js }}) (${{ needs.test.outputs.tbdex-js }})|" >> summary.md - echo "|tbdex-swift|$(get_status_emoji ${{ needs.test.outputs.tbdex-swift }}) (${{ needs.test.outputs.tbdex-swift }})|" >> summary.md - echo "|tbdex-kt|$(get_status_emoji ${{ needs.test.outputs.tbdex-kt }}) (${{ needs.test.outputs.tbdex-kt }})|" >> summary.md - echo "|tbdex-rs|$(get_status_emoji ${{ needs.test.outputs.tbdex-rs }}) (${{ needs.test.outputs.tbdex-rs }})|" >> summary.md - - SUMMARY=$(cat summary.md) - echo "SUMMARY<> $GITHUB_OUTPUT - echo "$SUMMARY" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - echo $SUMMARY >> $GITHUB_STEP_SUMMARY - - - name: Display job summary - env: - SUMMARY: ${{ steps.summarize-results.outputs.SUMMARY }} - run: echo $SUMMARY - - - name: Generate an access token to write to downstream repo - uses: actions/create-github-app-token@2986852ad836768dfea7781f31828eb3e17990fa # v1.6.2 - id: app-token - if: ${{ github.event_name == 'pull_request' }} - with: - app-id: ${{ secrets.CICD_ROBOT_GITHUB_APP_ID }} - private-key: ${{ secrets.CICD_ROBOT_GITHUB_APP_PRIVATE_KEY }} - owner: TBD54566975 - repositories: tbdex - - - name: Upsert comment with job summary - uses: actions/github-script@v6 - if: ${{ github.event_name == 'pull_request' }} - env: - SUMMARY: ${{ steps.summarize-results.outputs.SUMMARY }} - with: - github-token: ${{ steps.app-token.outputs.token }} - script: | - const summaryFile = `${{ env.SUMMARY }}` - if (!summaryFile) { - throw new Error("SUMMARY is not set") - } - - const suffixFooter = 'This is an automated CI report' - let githubSummary = `${summaryFile}\n\n---\n_${suffixFooter}_`; - - const {data: comments} = await github.rest.issues.listComments({ - owner: "TBD54566975", - repo: "tbdex", - issue_number: ${{ github.event.pull_request.number }}, - }); - - const summaryComment = comments.find(({user, body}) => user.type === "Bot" && user.login === "tbd-ci-cd-robot[bot]" && body.includes(suffixFooter)) - - if (summaryComment) { - await github.rest.issues.updateComment({ - comment_id: summaryComment.id, - body: githubSummary, - }); - } else { - await github.rest.issues.createComment({ - owner: "TBD54566975", - repo: "tbdex", - issue_number: ${{ github.event.pull_request.number }}, - body: githubSummary, - }); - } + # - name: Checkout spec repository +# uses: actions/checkout@v4 +# with: +# token: ${{ steps.app-token.outputs.token }} +# repository: TBD54566975/${{ matrix.repo }} +# ref: main +# submodules: true +# # persist-credentials: false + +# - name: Setup Spec values +# id: spec-vals +# run: | +# SHA="${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}" +# echo "SPEC_SHORT_SHA=${SHA:0:7}" >> $GITHUB_OUTPUT +# echo "SPEC_SHA=$SHA" >> $GITHUB_OUTPUT +# echo "SPEC_REF=tbd-ci-cd-robot/spec-tests" >> $GITHUB_OUTPUT + +# - name: Update spec submodule in ${{ matrix.repo }} +# env: +# SPEC_SHORT_SHA: ${{ steps.spec-vals.outputs.SPEC_SHORT_SHA }} +# SPEC_SHA: ${{ steps.spec-vals.outputs.SPEC_SHA }} +# SPEC_REF: ${{ steps.spec-vals.outputs.SPEC_REF }} +# run: | +# REPO_ROOT=$(pwd) +# cd ${{ matrix.spec_path }} +# git fetch origin ${{ env.SPEC_SHA }} +# git checkout ${{ env.SPEC_SHA }} +# cd $REPO_ROOT +# git checkout -b ${{ env.SPEC_REF }} +# git add . +# git config user.name "tbd-ci-cd-robot[bot]" +# git config user.email "${{ secrets.CICD_ROBOT_GITHUB_APP_ID }}+tbd-ci-cd-robot[bot]@users.noreply.github.com" +# git commit -m "Update tbdex spec to ${{ env.SPEC_SHORT_SHA }}" +# git push origin ${{ env.SPEC_REF }} -f + +# - name: Trigger and wait for ${{ matrix.repo }} CI pipeline +# uses: convictional/trigger-workflow-and-wait@v1.6.1 +# id: trigger-ci +# with: +# owner: TBD54566975 +# repo: ${{ matrix.repo }} +# github_token: ${{ steps.app-token.outputs.token }} +# workflow_file_name: ${{ matrix.ci_file }} +# ref: ${{ steps.spec-vals.outputs.SPEC_REF }} +# wait_interval: 10 +# propagate_failure: false +# # client_payload: '{}' +# # trigger_workflow: true +# # wait_workflow: true + +# # Read CI status +# - name: Read CI Job Status +# uses: actions/github-script@v6 +# id: read-ci-status +# env: +# RUN_ID: ${{ steps.trigger-ci.outputs.workflow_id }} +# with: +# github-token: ${{ steps.app-token.outputs.token }} +# script: | +# const {data: run} = await github.rest.actions.getWorkflowRun({ +# owner: 'TBD54566975', +# repo: '${{ matrix.repo }}', +# run_id: ${{ env.RUN_ID }}, +# }); +# console.info({run}) +# return run.conclusion + +# - id: output +# run: | +# echo "${{ matrix.repo }}=${{ steps.read-ci-status.outputs.result }}" >> $GITHUB_OUTPUT + +# collect-results: +# name: Collect Tests Results +# needs: test +# runs-on: ubuntu-latest +# steps: +# - name: Collect job results +# id: summarize-results +# run: | +# get_status_emoji() { +# if [ "$1" == "success" ]; then +# echo "✅" +# else +# echo "❌" +# fi +# } + +# touch summary.md + +# echo "## tbdex Spec Implementation SDKs Test Results" >> summary.md +# echo "| Repository | Status |" >> summary.md +# echo "|------------|--------|" >> summary.md +# echo "|tbdex-js|$(get_status_emoji ${{ needs.test.outputs.tbdex-js }}) (${{ needs.test.outputs.tbdex-js }})|" >> summary.md +# echo "|tbdex-swift|$(get_status_emoji ${{ needs.test.outputs.tbdex-swift }}) (${{ needs.test.outputs.tbdex-swift }})|" >> summary.md +# echo "|tbdex-kt|$(get_status_emoji ${{ needs.test.outputs.tbdex-kt }}) (${{ needs.test.outputs.tbdex-kt }})|" >> summary.md +# echo "|tbdex-rs|$(get_status_emoji ${{ needs.test.outputs.tbdex-rs }}) (${{ needs.test.outputs.tbdex-rs }})|" >> summary.md + +# SUMMARY=$(cat summary.md) +# echo "SUMMARY<> $GITHUB_OUTPUT +# echo "$SUMMARY" >> $GITHUB_OUTPUT +# echo "EOF" >> $GITHUB_OUTPUT +# echo $SUMMARY >> $GITHUB_STEP_SUMMARY + +# - name: Display job summary +# env: +# SUMMARY: ${{ steps.summarize-results.outputs.SUMMARY }} +# run: echo $SUMMARY + +# - name: Generate an access token to write to downstream repo +# uses: actions/create-github-app-token@2986852ad836768dfea7781f31828eb3e17990fa # v1.6.2 +# id: app-token +# if: ${{ github.event_name == 'pull_request' }} +# with: +# app-id: ${{ secrets.CICD_ROBOT_GITHUB_APP_ID }} +# private-key: ${{ secrets.CICD_ROBOT_GITHUB_APP_PRIVATE_KEY }} +# owner: TBD54566975 +# repositories: tbdex + +# - name: Upsert comment with job summary +# uses: actions/github-script@v6 +# if: ${{ github.event_name == 'pull_request' }} +# env: +# SUMMARY: ${{ steps.summarize-results.outputs.SUMMARY }} +# with: +# github-token: ${{ steps.app-token.outputs.token }} +# script: | +# const summaryFile = `${{ env.SUMMARY }}` +# if (!summaryFile) { +# throw new Error("SUMMARY is not set") +# } + +# const suffixFooter = 'This is an automated CI report' +# let githubSummary = `${summaryFile}\n\n---\n_${suffixFooter}_`; + +# const {data: comments} = await github.rest.issues.listComments({ +# owner: "TBD54566975", +# repo: "tbdex", +# issue_number: ${{ github.event.pull_request.number }}, +# }); + +# const summaryComment = comments.find(({user, body}) => user.type === "Bot" && user.login === "tbd-ci-cd-robot[bot]" && body.includes(suffixFooter)) + +# if (summaryComment) { +# await github.rest.issues.updateComment({ +# comment_id: summaryComment.id, +# body: githubSummary, +# }); +# } else { +# await github.rest.issues.createComment({ +# owner: "TBD54566975", +# repo: "tbdex", +# issue_number: ${{ github.event.pull_request.number }}, +# body: githubSummary, +# }); +# }