Skip to content

Commit 5a45132

Browse files
committed
Update logic to modular, pending testing for next release
1 parent 57bee51 commit 5a45132

File tree

2 files changed

+69
-36
lines changed

2 files changed

+69
-36
lines changed

.github/workflows/_conda-forge-package-release.yml

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
workflow_call:
55
inputs:
66
package:
7-
description: 'Package name (e.g. sagemaker-train)'
7+
description: 'Package being released (e.g. sagemaker-train)'
88
required: true
99
type: string
1010
feedstock:
@@ -15,6 +15,18 @@ on:
1515
description: 'PR title search string (e.g. sagemaker-train v1.6.0)'
1616
required: true
1717
type: string
18+
version:
19+
description: 'Version of this package being released (e.g. 1.6.0)'
20+
required: true
21+
type: string
22+
dep_package:
23+
description: 'Conda dependency to wait for before retrying CI (e.g. sagemaker-core)'
24+
required: true
25+
type: string
26+
dep_version:
27+
description: 'Version of the dependency to wait for (e.g. 2.6.0)'
28+
required: true
29+
type: string
1830
poll_interval:
1931
required: true
2032
type: string
@@ -31,15 +43,31 @@ jobs:
3143
env:
3244
GH_TOKEN: ${{ secrets.token }}
3345
steps:
34-
- name: Rerun failed checks or skip if already merged
46+
- name: Wait for dependency (${{ inputs.dep_package }}==${{ inputs.dep_version }}) on conda-forge
47+
run: |
48+
PACKAGE="${{ inputs.dep_package }}"
49+
VERSION="${{ inputs.dep_version }}"
50+
echo "Waiting for ${PACKAGE}==${VERSION} on conda-forge..."
51+
for i in $(seq 1 ${{ inputs.max_attempts }}); do
52+
RESULT=$(conda search -c conda-forge --override-channels \
53+
"${PACKAGE}==${VERSION}" --json 2>/dev/null \
54+
| python3 -c "import sys,json; d=json.load(sys.stdin); print('found' if d.get('$PACKAGE') else 'not_found')" \
55+
2>/dev/null || echo "not_found")
56+
echo "Attempt $i: ${RESULT}"
57+
[ "$RESULT" = "found" ] && echo "${PACKAGE}==${VERSION} is available." && exit 0
58+
sleep ${{ inputs.poll_interval }}
59+
done
60+
echo "Timed out waiting for ${PACKAGE}==${VERSION}." && exit 1
61+
62+
- name: Rerun failed checks on ${{ inputs.package }} feedstock PR
3563
run: |
3664
REPO="${{ inputs.feedstock }}"
3765
SEARCH="${{ inputs.pr_search }}"
3866
STATE=$(gh pr list --repo "$REPO" --state all \
3967
--search "$SEARCH" --json state -q '.[0].state // "NOT_FOUND"')
40-
echo "Current state: ${STATE}"
68+
echo "PR state: ${STATE}"
4169
if [ "$STATE" = "MERGED" ]; then
42-
echo "Already merged, skipping."; exit 0
70+
echo "Already merged, skipping rerun."; exit 0
4371
fi
4472
PR=$(gh pr list --repo "$REPO" --state open \
4573
--search "$SEARCH" --json number -q '.[0].number')
@@ -52,7 +80,7 @@ jobs:
5280
[ -n "$RUN_ID" ] && gh run rerun "$RUN_ID" --repo "$REPO" --failed \
5381
|| echo "No failed runs."
5482
55-
- name: Wait for merge
83+
- name: Wait for ${{ inputs.package }} feedstock PR to merge
5684
run: |
5785
REPO="${{ inputs.feedstock }}"
5886
SEARCH="${{ inputs.pr_search }}"
@@ -63,4 +91,4 @@ jobs:
6391
[ "$STATE" = "MERGED" ] && exit 0
6492
sleep ${{ inputs.poll_interval }}
6593
done
66-
echo "Timed out waiting for ${{ inputs.package }}." && exit 1
94+
echo "Timed out waiting for ${{ inputs.package }} PR to merge." && exit 1

.github/workflows/conda-forge-release-chain.yml

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ on:
88
required: false
99
default: '300'
1010
timeout_attempts:
11-
description: 'Max poll attempts per package before failing (default: 60 = 5hrs at 300s)'
11+
description: 'Max poll attempts per package before failing (default: 20 = 100min at 300s)'
1212
required: false
13-
default: '60'
13+
default: '20'
1414

1515
jobs:
1616
read-versions:
@@ -33,85 +33,90 @@ jobs:
3333
echo "mlops=$(cat sagemaker-mlops/VERSION)" >> $GITHUB_OUTPUT
3434
echo "pysdk=$(cat VERSION)" >> $GITHUB_OUTPUT
3535
echo "meta=$(cat VERSION)" >> $GITHUB_OUTPUT
36-
cat sagemaker-core/VERSION sagemaker-train/VERSION sagemaker-serve/VERSION \
37-
sagemaker-mlops/VERSION VERSION | paste - - - - - \
38-
| awk '{print "core="$1" train="$2" serve="$3" mlops="$4" pysdk/meta="$5}'
39-
40-
wait-sagemaker-core:
41-
needs: read-versions
42-
runs-on: ubuntu-latest
43-
env:
44-
GH_TOKEN: ${{ secrets.GH_PAT }}
45-
steps:
46-
- name: Wait for sagemaker-core to merge (automerges on its own)
47-
run: |
48-
REPO="conda-forge/sagemaker-core-feedstock"
49-
SEARCH="[bot-automerge] sagemaker-core v${{ needs.read-versions.outputs.core }}"
50-
for i in $(seq 1 ${{ github.event.inputs.timeout_attempts }}); do
51-
STATE=$(gh pr list --repo "$REPO" --state all \
52-
--search "$SEARCH" --json state -q '.[0].state // "NOT_FOUND"')
53-
echo "Attempt $i: ${STATE}"
54-
[ "$STATE" = "MERGED" ] && exit 0
55-
sleep ${{ github.event.inputs.poll_interval_seconds }}
56-
done
57-
echo "Timed out." && exit 1
36+
echo "Versions:"
37+
echo " sagemaker-core: $(cat sagemaker-core/VERSION)"
38+
echo " sagemaker-train: $(cat sagemaker-train/VERSION)"
39+
echo " sagemaker-serve: $(cat sagemaker-serve/VERSION)"
40+
echo " sagemaker-mlops: $(cat sagemaker-mlops/VERSION)"
41+
echo " sagemaker-python-sdk: $(cat VERSION)"
42+
echo " sagemaker (meta): $(cat VERSION)"
5843
44+
# sagemaker-train waits for sagemaker-core
5945
release-sagemaker-train:
60-
needs: [read-versions, wait-sagemaker-core]
46+
needs: read-versions
6147
uses: ./.github/workflows/_conda-forge-package-release.yml
6248
with:
6349
package: sagemaker-train
6450
feedstock: conda-forge/sagemaker-train-feedstock
6551
pr_search: "sagemaker-train v${{ needs.read-versions.outputs.train }}"
52+
version: ${{ needs.read-versions.outputs.train }}
53+
dep_package: sagemaker-core
54+
dep_version: ${{ needs.read-versions.outputs.core }}
6655
poll_interval: ${{ github.event.inputs.poll_interval_seconds }}
6756
max_attempts: ${{ github.event.inputs.timeout_attempts }}
6857
secrets:
69-
token: ${{ secrets.GH_PAT }}
58+
token: ${{ secrets.CONDA_FORGE_RELEASE }}
7059

60+
# sagemaker-serve waits for sagemaker-train
7161
release-sagemaker-serve:
7262
needs: [read-versions, release-sagemaker-train]
7363
uses: ./.github/workflows/_conda-forge-package-release.yml
7464
with:
7565
package: sagemaker-serve
7666
feedstock: conda-forge/sagemaker-serve-feedstock
7767
pr_search: "sagemaker-serve v${{ needs.read-versions.outputs.serve }}"
68+
version: ${{ needs.read-versions.outputs.serve }}
69+
dep_package: sagemaker-train
70+
dep_version: ${{ needs.read-versions.outputs.train }}
7871
poll_interval: ${{ github.event.inputs.poll_interval_seconds }}
7972
max_attempts: ${{ github.event.inputs.timeout_attempts }}
8073
secrets:
81-
token: ${{ secrets.GH_PAT }}
74+
token: ${{ secrets.CONDA_FORGE_RELEASE }}
8275

76+
# sagemaker-mlops waits for sagemaker-serve
8377
release-sagemaker-mlops:
8478
needs: [read-versions, release-sagemaker-serve]
8579
uses: ./.github/workflows/_conda-forge-package-release.yml
8680
with:
8781
package: sagemaker-mlops
8882
feedstock: conda-forge/sagemaker-mlops-feedstock
8983
pr_search: "sagemaker-mlops v${{ needs.read-versions.outputs.mlops }}"
84+
version: ${{ needs.read-versions.outputs.mlops }}
85+
dep_package: sagemaker-serve
86+
dep_version: ${{ needs.read-versions.outputs.serve }}
9087
poll_interval: ${{ github.event.inputs.poll_interval_seconds }}
9188
max_attempts: ${{ github.event.inputs.timeout_attempts }}
9289
secrets:
93-
token: ${{ secrets.GH_PAT }}
90+
token: ${{ secrets.CONDA_FORGE_RELEASE }}
9491

92+
# sagemaker-python-sdk waits for sagemaker-mlops
9593
release-sagemaker-python-sdk:
9694
needs: [read-versions, release-sagemaker-mlops]
9795
uses: ./.github/workflows/_conda-forge-package-release.yml
9896
with:
9997
package: sagemaker-python-sdk
10098
feedstock: conda-forge/sagemaker-python-sdk-feedstock
10199
pr_search: "[bot-automerge] sagemaker-python-sdk v${{ needs.read-versions.outputs.pysdk }}"
100+
version: ${{ needs.read-versions.outputs.pysdk }}
101+
dep_package: sagemaker-mlops
102+
dep_version: ${{ needs.read-versions.outputs.mlops }}
102103
poll_interval: ${{ github.event.inputs.poll_interval_seconds }}
103104
max_attempts: ${{ github.event.inputs.timeout_attempts }}
104105
secrets:
105-
token: ${{ secrets.GH_PAT }}
106+
token: ${{ secrets.CONDA_FORGE_RELEASE }}
106107

108+
# sagemaker (meta) waits for sagemaker-python-sdk
107109
release-sagemaker:
108110
needs: [read-versions, release-sagemaker-python-sdk]
109111
uses: ./.github/workflows/_conda-forge-package-release.yml
110112
with:
111113
package: sagemaker
112114
feedstock: conda-forge/sagemaker-feedstock
113115
pr_search: "[bot-automerge] sagemaker v${{ needs.read-versions.outputs.meta }}"
116+
version: ${{ needs.read-versions.outputs.meta }}
117+
dep_package: sagemaker-python-sdk
118+
dep_version: ${{ needs.read-versions.outputs.pysdk }}
114119
poll_interval: ${{ github.event.inputs.poll_interval_seconds }}
115120
max_attempts: ${{ github.event.inputs.timeout_attempts }}
116121
secrets:
117-
token: ${{ secrets.GH_PAT }}
122+
token: ${{ secrets.CONDA_FORGE_RELEASE }}

0 commit comments

Comments
 (0)