|
1 | 1 | name: Deploy to staging-public |
2 | 2 |
|
3 | 3 | on: |
4 | | - push: |
5 | | - branches: |
6 | | - - v4 |
7 | | - workflow_dispatch: {} |
| 4 | + workflow_run: |
| 5 | + workflows: ["Nightly Release Tag (v4-next)"] |
| 6 | + types: |
| 7 | + - completed |
| 8 | + workflow_dispatch: |
| 9 | + inputs: |
| 10 | + tag: |
| 11 | + description: "Nightly tag to deploy (e.g., v4.2.0-nightly.20260330). Leave empty to use latest nightly tag." |
| 12 | + required: false |
| 13 | + type: string |
8 | 14 |
|
9 | 15 | concurrency: |
10 | 16 | group: deploy-staging-public |
|
16 | 22 | jobs: |
17 | 23 | determine-tag: |
18 | 24 | runs-on: ubuntu-latest |
| 25 | + if: >- |
| 26 | + github.event_name == 'workflow_dispatch' || |
| 27 | + (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success') |
19 | 28 | outputs: |
20 | | - tag: ${{ steps.poll-tag.outputs.tag }} |
21 | | - semver: ${{ steps.poll-tag.outputs.semver }} |
| 29 | + tag: ${{ steps.resolve.outputs.tag }} |
| 30 | + semver: ${{ steps.resolve.outputs.semver }} |
22 | 31 | steps: |
23 | | - - name: Checkout |
| 32 | + - name: Checkout v4-next |
24 | 33 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 |
25 | 34 | with: |
| 35 | + ref: v4-next |
26 | 36 | token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }} |
27 | 37 | fetch-depth: 0 |
28 | 38 |
|
29 | | - - name: Poll for semver tag at HEAD |
30 | | - id: poll-tag |
| 39 | + - name: Resolve nightly tag |
| 40 | + id: resolve |
31 | 41 | run: | |
32 | | - HEAD_SHA=$(git rev-parse HEAD) |
33 | | - MAX_ATTEMPTS=60 |
34 | | - echo "Looking for any semver tag at HEAD ($HEAD_SHA)" |
35 | | -
|
36 | | - for i in $(seq 1 $MAX_ATTEMPTS); do |
37 | | - git fetch --tags --force |
38 | | -
|
39 | | - # Collect all valid semver tags pointing at HEAD |
40 | | - SEMVER_TAGS=() |
41 | | - for t in $(git tag --points-at HEAD); do |
42 | | - if ci3/semver check "$t"; then |
43 | | - SEMVER_TAGS+=("$t") |
44 | | - fi |
45 | | - done |
| 42 | + git fetch --tags --force |
46 | 43 |
|
47 | | - # If we found valid semver tags, pick the highest |
48 | | - if [ ${#SEMVER_TAGS[@]} -gt 0 ]; then |
49 | | - TAG=$(ci3/semver sort "${SEMVER_TAGS[@]}" | tail -n 1) |
50 | | - echo "Found tag: $TAG" |
51 | | - SEMVER="${TAG#v}" |
52 | | - echo "tag=$TAG" >> $GITHUB_OUTPUT |
53 | | - echo "semver=$SEMVER" >> $GITHUB_OUTPUT |
54 | | - exit 0 |
55 | | - fi |
| 44 | + if [[ -n "${{ inputs.tag }}" ]]; then |
| 45 | + TAG="${{ inputs.tag }}" |
| 46 | + echo "Using manually specified tag: $TAG" |
| 47 | + else |
| 48 | + current_version=$(jq -r '."."' .release-please-manifest.json) |
| 49 | + TAG="v${current_version}-nightly.$(date -u +%Y%m%d)" |
| 50 | + echo "Nightly tag: $TAG" |
| 51 | + fi |
56 | 52 |
|
57 | | - echo "Attempt $i/$MAX_ATTEMPTS: No semver tag yet, waiting 10s..." |
58 | | - sleep 10 |
59 | | - done |
| 53 | + # Validate tag exists |
| 54 | + if ! git rev-parse "$TAG" &>/dev/null; then |
| 55 | + echo "Error: Tag $TAG does not exist" |
| 56 | + exit 1 |
| 57 | + fi |
60 | 58 |
|
61 | | - echo "Error: No semver tag found at HEAD after 10 minutes" |
62 | | - exit 1 |
| 59 | + SEMVER="${TAG#v}" |
| 60 | + echo "tag=$TAG" >> $GITHUB_OUTPUT |
| 61 | + echo "semver=$SEMVER" >> $GITHUB_OUTPUT |
63 | 62 |
|
64 | 63 | wait-for-ci3: |
65 | 64 | needs: determine-tag |
|
80 | 79 |
|
81 | 80 | deploy: |
82 | 81 | needs: [determine-tag, wait-for-ci3] |
83 | | - runs-on: ubuntu-latest |
84 | | - steps: |
85 | | - - name: Trigger deploy-network on next branch |
86 | | - run: | |
87 | | - echo "Triggering deploy-network for staging-public with semver=${{ needs.determine-tag.outputs.semver }}" |
88 | | - gh workflow run deploy-network.yml \ |
89 | | - --repo "${{ github.repository }}" \ |
90 | | - --ref next \ |
91 | | - -f network=staging-public \ |
92 | | - -f semver="${{ needs.determine-tag.outputs.semver }}" \ |
93 | | - -f source_tag="${{ needs.determine-tag.outputs.tag }}" |
| 82 | + uses: ./.github/workflows/deploy-network.yml |
| 83 | + with: |
| 84 | + network: staging-public |
| 85 | + semver: ${{ needs.determine-tag.outputs.semver }} |
| 86 | + source_tag: ${{ needs.determine-tag.outputs.tag }} |
| 87 | + secrets: inherit |
0 commit comments