Skip to content

Commit fefbd25

Browse files
authored
chore: publish to npm only from 'trusted publisher' pipeline (#261)
1 parent 4fe9424 commit fefbd25

File tree

2 files changed

+46
-54
lines changed

2 files changed

+46
-54
lines changed

.github/workflows/release.yml

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@
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+
613
workflow_dispatch:
714
inputs:
815
version_type:
@@ -15,6 +22,10 @@ on:
1522
- minor
1623
- major
1724

25+
permissions:
26+
contents: write
27+
id-token: write
28+
1829
jobs:
1930
release:
2031
runs-on: ubuntu-latest
@@ -31,6 +42,7 @@ jobs:
3142
with:
3243
node-version: 18
3344
cache: npm
45+
registry-url: 'https://registry.npmjs.org'
3446

3547
- name: Configure git
3648
run: |
@@ -52,12 +64,16 @@ jobs:
5264
- name: determine semver component to bump
5365
id: bump-decision
5466
run: |
55-
echo "bump-part=${{ github.event.inputs.version_type }}" >> "$GITHUB_OUTPUT"
67+
echo "bump-part=${{ inputs.version_type }}" >> "$GITHUB_OUTPUT"
5668
5769
- name: Update package with new version
5870
id: bump
5971
run: |
60-
echo "version=$(npm version ${{ steps.bump-decision.outputs.bump-part }} --no-git-tag-version )" >> "$GITHUB_OUTPUT"
72+
if [[ "${{ inputs.version_type }}" == "prerelease" ]]; then
73+
echo "version=$(npm version prerelease --no-git-tag-version --preid ea)" >> "$GITHUB_OUTPUT"
74+
else
75+
echo "version=$(npm version ${{ steps.bump-decision.outputs.bump-part }} --no-git-tag-version )" >> "$GITHUB_OUTPUT"
76+
fi
6177
6278
- name: Install project modules
6379
run: npm ci
@@ -66,8 +82,6 @@ jobs:
6682
run: npm run compile
6783

6884
- name: Publish package
69-
env:
70-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
7185
run: npm publish
7286

7387
- name: Commit and push package modifications
@@ -83,6 +97,7 @@ jobs:
8397
git push origin ${{ steps.bump.outputs.version }}
8498
8599
- name: Create release notes for ${{ steps.bump.outputs.version }} release
100+
if: inputs.version_type != 'prerelease'
86101
uses: actions/github-script@v6
87102
id: release-notes
88103
with:
@@ -101,11 +116,19 @@ jobs:
101116
github-token: ${{ secrets.GITHUB_TOKEN }}
102117
script: |
103118
const repo_name = context.payload.repository.full_name
104-
const response = await github.request('POST /repos/' + repo_name + '/releases', {
119+
const isPrerelease = '${{ inputs.version_type }}' === 'prerelease';
120+
const releaseConfig = {
105121
tag_name: '${{ steps.bump.outputs.version }}',
106122
name: '${{ steps.bump.outputs.version }}',
107-
draft: false,
108-
body: ${{ steps.release-notes.outputs.result }},
109-
prerelease: false,
110-
make_latest: 'true'
111-
})
123+
prerelease: isPrerelease
124+
};
125+
126+
if (isPrerelease) {
127+
releaseConfig.generate_release_notes = true;
128+
} else {
129+
releaseConfig.draft = false;
130+
releaseConfig.body = ${{ steps.release-notes.outputs.result }};
131+
releaseConfig.make_latest = 'true';
132+
}
133+
134+
const response = await github.request('POST /repos/' + repo_name + '/releases', releaseConfig);

.github/workflows/stage.yml

Lines changed: 13 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
@@ -38,6 +40,7 @@ jobs:
3840
with:
3941
node-version: 18
4042
cache: npm
43+
registry-url: 'https://registry.npmjs.org'
4144

4245
- name: Enable Corepack
4346
run: corepack enable
@@ -69,21 +72,10 @@ jobs:
6972
repo: anchore/syft
7073
platform: linux
7174
arch: amd64
72-
# tag: the latest one, so we can catch changes
7375

7476
- name: Setup skopeo
7577
run: sudo apt update && sudo apt-get -y install skopeo
7678

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-
8779
- name: Install project modules
8880
run: npm ci
8981

@@ -104,6 +96,7 @@ jobs:
10496
with:
10597
python-version: '3.9'
10698
cache: 'pip'
99+
107100
- name: get Python location
108101
id: python-location
109102
run: |
@@ -122,32 +115,8 @@ jobs:
122115
echo "Running Again Integration tests =>"
123116
npm run integration-tests
124117
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-
})
118+
publish-prerelease:
119+
needs: test
120+
uses: ./.github/workflows/release.yml
121+
with:
122+
version_type: prerelease

0 commit comments

Comments
 (0)