Skip to content

Commit c96f1d9

Browse files
committed
chore: publish to npm only from 'trusted publisher' pipeline
1 parent 4fe9424 commit c96f1d9

2 files changed

Lines changed: 49 additions & 52 deletions

File tree

.github/workflows/release.yml

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,16 @@
33
name: Release
44

55
on:
6+
workflow_call:
7+
inputs:
8+
version_type:
9+
description: 'Type of version bump'
10+
required: true
11+
type: string
12+
secrets:
13+
NPM_TOKEN:
14+
required: true
15+
616
workflow_dispatch:
717
inputs:
818
version_type:
@@ -15,6 +25,10 @@ on:
1525
- minor
1626
- major
1727

28+
permissions:
29+
contents: write
30+
id-token: write
31+
1832
jobs:
1933
release:
2034
runs-on: ubuntu-latest
@@ -52,12 +66,16 @@ jobs:
5266
- name: determine semver component to bump
5367
id: bump-decision
5468
run: |
55-
echo "bump-part=${{ github.event.inputs.version_type }}" >> "$GITHUB_OUTPUT"
69+
echo "bump-part=${{ inputs.version_type }}" >> "$GITHUB_OUTPUT"
5670
5771
- name: Update package with new version
5872
id: bump
5973
run: |
60-
echo "version=$(npm version ${{ steps.bump-decision.outputs.bump-part }} --no-git-tag-version )" >> "$GITHUB_OUTPUT"
74+
if [[ "${{ inputs.version_type }}" == "prerelease" ]]; then
75+
echo "version=$(npm version prerelease --no-git-tag-version --preid ea)" >> "$GITHUB_OUTPUT"
76+
else
77+
echo "version=$(npm version ${{ steps.bump-decision.outputs.bump-part }} --no-git-tag-version )" >> "$GITHUB_OUTPUT"
78+
fi
6179
6280
- name: Install project modules
6381
run: npm ci
@@ -83,6 +101,7 @@ jobs:
83101
git push origin ${{ steps.bump.outputs.version }}
84102
85103
- name: Create release notes for ${{ steps.bump.outputs.version }} release
104+
if: inputs.version_type != 'prerelease'
86105
uses: actions/github-script@v6
87106
id: release-notes
88107
with:
@@ -101,11 +120,19 @@ jobs:
101120
github-token: ${{ secrets.GITHUB_TOKEN }}
102121
script: |
103122
const repo_name = context.payload.repository.full_name
104-
const response = await github.request('POST /repos/' + repo_name + '/releases', {
123+
const isPrerelease = '${{ inputs.version_type }}' === 'prerelease';
124+
const releaseConfig = {
105125
tag_name: '${{ steps.bump.outputs.version }}',
106126
name: '${{ steps.bump.outputs.version }}',
107-
draft: false,
108-
body: ${{ steps.release-notes.outputs.result }},
109-
prerelease: false,
110-
make_latest: 'true'
111-
})
127+
prerelease: isPrerelease
128+
};
129+
130+
if (isPrerelease) {
131+
releaseConfig.generate_release_notes = true;
132+
} else {
133+
releaseConfig.draft = false;
134+
releaseConfig.body = ${{ steps.release-notes.outputs.result }};
135+
releaseConfig.make_latest = 'true';
136+
}
137+
138+
const response = await github.request('POST /repos/' + repo_name + '/releases', releaseConfig);

.github/workflows/stage.yml

Lines changed: 14 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@ on:
2020
- ".github/workflows/stage.yml"
2121
- "docker-image/**"
2222

23+
permissions:
24+
contents: write
25+
id-token: write
26+
2327
jobs:
24-
stage:
28+
test:
2529
runs-on: ubuntu-latest
26-
# Branches that starts with `release/` shouldn't trigger this workflow, as these are triggering the release workflow.
2730
if: github.repository_owner == 'guacsec' && github.event.pull_request.merged == true && !startsWith(github.head_ref, 'release/')
28-
environment: staging
29-
name: Stage the project
31+
name: Test before staging
3032
steps:
3133
- name: Checkout sources
3234
uses: actions/checkout@v4
@@ -69,21 +71,10 @@ jobs:
6971
repo: anchore/syft
7072
platform: linux
7173
arch: amd64
72-
# tag: the latest one, so we can catch changes
7374

7475
- name: Setup skopeo
7576
run: sudo apt update && sudo apt-get -y install skopeo
7677

77-
- name: Configure git
78-
run: |
79-
git config user.name "${{ github.actor }}"
80-
git config user.email "${{ github.actor }}@users.noreply.github.com"
81-
82-
- name: Update package with new version
83-
id: bump
84-
run: |
85-
echo "version=$(npm version prerelease --no-git-tag-version --preid ea)" >> "$GITHUB_OUTPUT"
86-
8778
- name: Install project modules
8879
run: npm ci
8980

@@ -104,6 +95,7 @@ jobs:
10495
with:
10596
python-version: '3.9'
10697
cache: 'pip'
98+
10799
- name: get Python location
108100
id: python-location
109101
run: |
@@ -122,32 +114,10 @@ jobs:
122114
echo "Running Again Integration tests =>"
123115
npm run integration-tests
124116
125-
- name: Publish package
126-
env:
127-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
128-
run: npm publish
129-
130-
- name: Commit and push package modifications
131-
run: |
132-
git add package.json
133-
git add package-lock.json
134-
git commit -m "build: updated package with ${{ steps.bump.outputs.version }} [skip ci]"
135-
git push
136-
137-
- name: Create and push new tag
138-
run: |
139-
git tag ${{ steps.bump.outputs.version }} -m "${{ steps.bump.outputs.version }}"
140-
git push origin ${{ steps.bump.outputs.version }}
141-
142-
- name: Create a release
143-
uses: actions/github-script@v6.4.1
144-
with:
145-
github-token: ${{ secrets.GITHUB_TOKEN }}
146-
script: |
147-
const repo_name = context.payload.repository.full_name
148-
const response = await github.request('POST /repos/' + repo_name + '/releases', {
149-
tag_name: '${{ steps.bump.outputs.version }}',
150-
name: '${{ steps.bump.outputs.version }}',
151-
prerelease: true,
152-
generate_release_notes: true
153-
})
117+
publish-prerelease:
118+
needs: test
119+
uses: ./.github/workflows/release.yml
120+
with:
121+
version_type: prerelease
122+
secrets:
123+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

0 commit comments

Comments
 (0)