|
1 | 1 | name: Release |
2 | 2 |
|
3 | 3 | on: |
4 | | - pull_request: |
5 | 4 | push: |
6 | 5 | tags: |
7 | 6 | - "core-v*" |
8 | 7 | - "express-v*" |
9 | 8 |
|
10 | 9 | jobs: |
11 | | - publish-stable: |
12 | | - name: Publish Stable Release |
| 10 | + publish: |
| 11 | + name: Publish Package |
13 | 12 | runs-on: ubuntu-latest |
14 | | - if: startsWith(github.ref, 'refs/tags/core-v') || startsWith(github.ref, 'refs/tags/express-v') |
| 13 | + |
15 | 14 | permissions: |
16 | 15 | contents: read |
17 | 16 | id-token: write |
18 | 17 |
|
19 | 18 | steps: |
20 | 19 | - uses: actions/checkout@v4 |
| 20 | + with: |
| 21 | + fetch-depth: 0 |
21 | 22 |
|
22 | 23 | - uses: actions/setup-node@v4 |
23 | 24 | with: |
24 | 25 | node-version: 20 |
25 | 26 | registry-url: https://registry.npmjs.org/ |
26 | 27 |
|
27 | | - - name: Determine package |
28 | | - id: pkg |
| 28 | + - name: Determine package and version |
| 29 | + id: meta |
29 | 30 | run: | |
30 | | - if [[ "${GITHUB_REF}" == refs/tags/core-v* ]]; then |
31 | | - echo "package=core" >> $GITHUB_OUTPUT |
32 | | - elif [[ "${GITHUB_REF}" == refs/tags/express-v* ]]; then |
33 | | - echo "package=express" >> $GITHUB_OUTPUT |
| 31 | + TAG="${GITHUB_REF#refs/tags/}" |
| 32 | +
|
| 33 | + if [[ "$TAG" == core-v* ]]; then |
| 34 | + PACKAGE="core" |
| 35 | + VERSION="${TAG#core-v}" |
| 36 | + elif [[ "$TAG" == express-v* ]]; then |
| 37 | + PACKAGE="express" |
| 38 | + VERSION="${TAG#express-v}" |
34 | 39 | else |
35 | | - echo "Unknown tag format" |
| 40 | + echo "Invalid tag format" |
| 41 | + exit 1 |
| 42 | + fi |
| 43 | +
|
| 44 | + echo "package=$PACKAGE" >> $GITHUB_OUTPUT |
| 45 | + echo "version=$VERSION" >> $GITHUB_OUTPUT |
| 46 | +
|
| 47 | + echo "Publishing $PACKAGE version $VERSION" |
| 48 | +
|
| 49 | + - name: Validate package.json version matches tag |
| 50 | + working-directory: packages/${{ steps.meta.outputs.package }} |
| 51 | + run: | |
| 52 | + PACKAGE_VERSION=$(node -p "require('./package.json').version") |
| 53 | + if [ "$PACKAGE_VERSION" != "${{ steps.meta.outputs.version }}" ]; then |
| 54 | + echo "Version mismatch!" |
| 55 | + echo "Tag version: ${{ steps.meta.outputs.version }}" |
| 56 | + echo "package.json version: $PACKAGE_VERSION" |
36 | 57 | exit 1 |
37 | 58 | fi |
38 | 59 |
|
39 | 60 | - name: Install dependencies |
40 | | - working-directory: packages/${{ steps.pkg.outputs.package }} |
| 61 | + working-directory: packages/${{ steps.meta.outputs.package }} |
41 | 62 | run: npm ci |
42 | 63 |
|
43 | 64 | - name: Build |
44 | | - working-directory: packages/${{ steps.pkg.outputs.package }} |
| 65 | + working-directory: packages/${{ steps.meta.outputs.package }} |
45 | 66 | run: npm run build |
46 | 67 |
|
47 | | - - name: Publish stable to npm |
48 | | - working-directory: packages/${{ steps.pkg.outputs.package }} |
| 68 | + - name: Publish to npm |
| 69 | + working-directory: packages/${{ steps.meta.outputs.package }} |
49 | 70 | run: npm publish --access public |
50 | 71 | env: |
51 | 72 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} |
0 commit comments