@@ -445,3 +445,108 @@ jobs:
445445 AWS_SHUTDOWN_TIME : 180
446446 run : |
447447 ./.github/ci3.sh network-tests-kind
448+
449+ # Backwards compatibility e2e tests.
450+ # Runs e2e tests with contract artifacts from every prior stable release to validate
451+ # that new client code works with old contract artifacts ("new pxe / old contracts").
452+ # Blocking for stable/RC releases: ci-release-publish requires this job to pass before
453+ # publishing. Observational for nightlies: runs, but continue-on-error keeps the workflow
454+ # green and ci-release-publish's condition publishes nightlies regardless of the result.
455+ # Escape hatch: ci-skip-compat-e2e label makes failures non-blocking on release PRs.
456+ ci-compat-e2e :
457+ runs-on : ubuntu-latest
458+ permissions :
459+ id-token : write
460+ contents : read
461+ needs : [ci]
462+ if : |
463+ always()
464+ && (needs.ci.result == 'success' || needs.ci.result == 'skipped')
465+ && github.event.pull_request.head.repo.fork != true
466+ && github.event.pull_request.draft == false
467+ && (
468+ (startsWith(github.ref, 'refs/tags/v') && !contains(github.ref_name, '-commit.'))
469+ || contains(github.event.pull_request.labels.*.name, 'ci-compat-e2e')
470+ || contains(github.event.pull_request.labels.*.name, 'ci-release-pr')
471+ )
472+ # Non-blocking for nightlies and when ci-skip-compat-e2e escape hatch is applied.
473+ continue-on-error : ${{ contains(github.ref_name, '-nightly.') || contains(github.event.pull_request.labels.*.name, 'ci-skip-compat-e2e') }}
474+ steps :
475+ - name : Checkout
476+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
477+ with :
478+ ref : ${{ github.event.pull_request.head.sha || github.sha }}
479+
480+ - name : Configure AWS credentials (OIDC)
481+ uses : aws-actions/configure-aws-credentials@v4
482+ with :
483+ role-to-assume : ${{ secrets.AWS_OIDC_ROLE_ARN }}
484+ aws-region : us-east-2
485+ role-session-name : ci3-compat-e2e-${{ github.run_id }}
486+ role-duration-seconds : 21600 # 6h – covers AWS_SHUTDOWN_TIME (300 min) + 60 min buffer
487+
488+ - name : Run Backwards Compatibility E2E Tests
489+ timeout-minutes : 330
490+ env :
491+ GITHUB_TOKEN : ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}
492+ BUILD_INSTANCE_SSH_KEY : ${{ secrets.BUILD_INSTANCE_SSH_KEY }}
493+ GCP_SA_KEY : ${{ secrets.GCP_SA_KEY }}
494+ DOCKERHUB_PASSWORD : ${{ secrets.DOCKERHUB_PASSWORD }}
495+ DOCKERHUB_USERNAME : ${{ secrets.DOCKERHUB_USERNAME }}
496+ SLACK_BOT_TOKEN : ${{ secrets.SLACK_BOT_TOKEN }}
497+ CI3_INSTANCE_PROFILE_NAME : ${{ secrets.CI3_INSTANCE_PROFILE_NAME }}
498+ CI3_SECURITY_GROUP_ID : ${{ secrets.CI3_SECURITY_GROUP_ID }}
499+ RUN_ID : ${{ github.run_id }}
500+ AWS_SHUTDOWN_TIME : 300
501+ run : ./.github/ci3.sh compat-e2e
502+
503+ # Publishes the release (npm, Docker, GitHub release, aztec-up scripts, etc.).
504+ # Gated on ci-compat-e2e: a compat regression blocks stable/RC publishing. Nightlies
505+ # publish regardless — compat-e2e runs there observationally. Dev `-commit.` tags from
506+ # the ci-release-pr flow never reach this job (they are not real releases).
507+ ci-release-publish :
508+ runs-on : ubuntu-latest
509+ environment : master
510+ permissions :
511+ id-token : write
512+ contents : read
513+ needs : [ci, ci-compat-e2e]
514+ if : |
515+ startsWith(github.ref, 'refs/tags/v')
516+ && !contains(github.ref_name, '-commit.')
517+ && needs.ci.result == 'success'
518+ && (
519+ contains(github.ref_name, '-nightly.')
520+ || needs.ci-compat-e2e.result == 'success'
521+ )
522+ steps :
523+ - name : Checkout
524+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
525+ with :
526+ ref : ${{ github.sha }}
527+
528+ - name : Configure AWS credentials (OIDC)
529+ uses : aws-actions/configure-aws-credentials@v4
530+ with :
531+ role-to-assume : ${{ secrets.AWS_OIDC_ROLE_ARN }}
532+ aws-region : us-east-2
533+ role-session-name : ci3-release-publish-${{ github.run_id }}
534+ role-duration-seconds : 21600
535+
536+ - name : Run Release Publish
537+ env :
538+ GITHUB_TOKEN : ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}
539+ BUILD_INSTANCE_SSH_KEY : ${{ secrets.BUILD_INSTANCE_SSH_KEY }}
540+ GCP_SA_KEY : ${{ secrets.GCP_SA_KEY }}
541+ GCP_PROJECT_ID : ${{ secrets.GCP_PROJECT_ID }}
542+ DOCKERHUB_PASSWORD : ${{ secrets.DOCKERHUB_PASSWORD }}
543+ DOCKERHUB_USERNAME : ${{ secrets.DOCKERHUB_USERNAME }}
544+ NPM_TOKEN : ${{ secrets.NPM_TOKEN }}
545+ CARGO_REGISTRY_TOKEN : ${{ secrets.CARGO_REGISTRY_TOKEN }}
546+ NETLIFY_SITE_ID : ${{ secrets.NETLIFY_SITE_ID }}
547+ NETLIFY_AUTH_TOKEN : ${{ secrets.NETLIFY_AUTH_TOKEN }}
548+ SLACK_BOT_TOKEN : ${{ secrets.SLACK_BOT_TOKEN }}
549+ CI3_INSTANCE_PROFILE_NAME : ${{ secrets.CI3_INSTANCE_PROFILE_NAME }}
550+ CI3_SECURITY_GROUP_ID : ${{ secrets.CI3_SECURITY_GROUP_ID }}
551+ RUN_ID : ${{ github.run_id }}
552+ run : ./.github/ci3.sh release-publish
0 commit comments