Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,11 @@ jobs:
name: Publish (NPM)
needs: ['build', 'test', 'browser']
if: ${{ github.ref == 'refs/heads/main' || github.event_name == 'release' }}
# One canary publish at a time, so the check below reads the canary the previous one published.
concurrency:
group: ${{ github.event_name == 'release' && github.run_id || 'canary-publish' }}
cancel-in-progress: false
queue: max
steps:
- name: Setup node
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
Expand All @@ -175,7 +180,37 @@ jobs:
with:
name: angularfire-${{ github.run_id }}
path: dist
- name: Skip a canary that is not newer than npm's
id: canary_check
run: |
VERSION=$(node -p "require('./dist/packages-dist/package.json').version")
if [[ $VERSION == *-canary.* ]]; then
# The dist-tags endpoint is not CDN-cached, unlike the package data `npm view` reads.
DIST_TAGS=$(curl -fsS --retry 3 --max-time 30 https://registry.npmjs.org/-/package/@angular/fire/dist-tags)
NPM_CANARY=$(node -p "JSON.parse(process.argv[1]).canary" "$DIST_TAGS")
# Order by position on main, not by version, which can be higher for an older commit.
git clone --quiet --bare --filter=tree:0 "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY" history.git
HOW_TO_FIX="Every canary publish fails until the canary dist-tag points at a build of a commit on main. Publish rights are required to fix it with: npm dist-tag add @angular/fire@<version> canary"
if ! NPM_CANARY_COMMIT=$(git -C history.git rev-parse --verify --quiet "${NPM_CANARY##*[.-]}^{commit}"); then
echo "::error::Could not match the canary on npm, $NPM_CANARY, to a single commit in this repository. $HOW_TO_FIX"
exit 1
fi
# `npm publish` always moves a dist-tag, so a canary that is not newer must not publish at all.
if [[ $NPM_CANARY_COMMIT == "$GITHUB_SHA" ]]; then
if [[ $VERSION == "$NPM_CANARY" ]]; then
echo "::notice::Not publishing $VERSION, because it is already the canary on npm."
echo "skip=true" >> "$GITHUB_OUTPUT"
fi
elif git -C history.git merge-base --is-ancestor "$GITHUB_SHA" "$NPM_CANARY_COMMIT"; then
echo "::warning::Not publishing $VERSION, because the canary on npm, $NPM_CANARY, is from a later commit on main."
echo "skip=true" >> "$GITHUB_OUTPUT"
elif ! git -C history.git merge-base --is-ancestor "$NPM_CANARY_COMMIT" "$GITHUB_SHA"; then
echo "::error::Not publishing $VERSION, because its commit and the commit of the canary on npm, $NPM_CANARY, are not on the same line of history. One of them is not on main. $HOW_TO_FIX"
exit 1
fi
fi
- name: Publish
if: steps.canary_check.outputs.skip != 'true'
run: |
cd ./dist/packages-dist
chmod +x publish.sh
Expand Down
Loading