11name : NPM Operations
22
33permissions :
4- # In order to create the git tag, we must have write permissions.
5- contents : write
6- # This is important. Trusted Publishing requires this for the OIDC exchange.
74 id-token : write
5+ contents : write
86
97on :
10- # Triggered by other workflows for specific NPM operations
11- workflow_call :
12- inputs :
13- operation :
14- description : ' NPM operation to perform'
15- required : true
16- type : string
17- # Valid values: publish-release, publish-prerelease, deprecate-old-versions
18- preid :
19- description : ' Prerelease identifier (e.g., rc, alpha, beta)'
20- required : false
21- type : string
22- default : ' rc'
23- version-override :
24- description : ' Override version for prerelease operations'
25- required : false
26- type : string
27- dry_run :
28- description : ' Dry run mode for testing'
29- required : false
30- type : boolean
31- default : false
32- secrets :
33- GITHUB_LOGIN :
34- required : false
35- GITHUB_EMAIL :
36- required : false
37- NR_API_KEY_PRODUCTION :
38- required : false
39- outputs :
40- operation :
41- description : ' The operation that was performed'
42- value : ${{ jobs.npm-operations.outputs.operation }}
43- success :
44- description : ' Whether the operation was successful'
45- value : ${{ jobs.npm-operations.outputs.success }}
8+ # 1. Pull request merge - triggers prerelease operation
9+ push :
10+ branches :
11+ - main
4612
47- # Manual trigger for testing/emergency operations
13+ # 2. Release - triggers release operations
14+ release :
15+ types : [published]
16+
17+ # 3. Scheduled deprecation (keeping existing nightly schedule)
18+ schedule :
19+ # Runs every day at 4AM
20+ - cron : ' 0 4 * * *'
21+
22+ # 4. Manual trigger for testing/manual/emergency operations
4823 workflow_dispatch :
4924 inputs :
5025 operation :
7146 default : false
7247
7348jobs :
49+ # Determine which operations to run based on trigger
50+ determine-operations :
51+ runs-on : ubuntu-latest
52+ outputs :
53+ operations : ${{ steps.determine.outputs.operations }}
54+ steps :
55+ - name : Determine operations based on trigger
56+ id : determine
57+ run : |
58+ case "${{ github.event_name }}" in
59+ "push")
60+ echo "operations=[\"publish-prerelease\"]" >> $GITHUB_OUTPUT
61+ ;;
62+ "release")
63+ echo "operations=[\"publish-release\"]" >> $GITHUB_OUTPUT
64+ ;;
65+ "schedule")
66+ echo "operations=[\"deprecate-old-versions\"]" >> $GITHUB_OUTPUT
67+ ;;
68+ "workflow_dispatch")
69+ echo "operations=[\"${{ inputs.operation }}\"]" >> $GITHUB_OUTPUT
70+ ;;
71+ *)
72+ echo "operations=[]" >> $GITHUB_OUTPUT
73+ ;;
74+ esac
75+
76+ # Execute NPM operations based on determined operations
7477 npm-operations :
78+ needs : determine-operations
79+ if : needs.determine-operations.outputs.operations != '[]'
7580 runs-on : ubuntu-latest
7681 timeout-minutes : 30
7782 defaults :
8085 env :
8186 GITHUB_LOGIN : ${{ secrets.GITHUB_LOGIN || secrets.BROWSER_GITHUB_BOT_NAME }}
8287 GITHUB_EMAIL : ${{ secrets.GITHUB_EMAIL || secrets.BROWSER_GITHUB_BOT_EMAIL }}
88+ OPERATION : ${{ fromJson(needs.determine-operations.outputs.operations)[0] }}
8389
8490 steps :
8591 - uses : actions/checkout@v5
@@ -104,31 +110,34 @@ jobs:
104110
105111 # Install dependencies for publish operations
106112 - name : Install project dependencies
107- if : inputs.operation == 'publish-release' || inputs.operation == 'publish-prerelease'
113+ if : env.OPERATION == 'publish-release' || env.OPERATION == 'publish-prerelease'
108114 run : npm ci
109115
110116 # Build NPM package for release
111117 - name : Build npm package
112- if : inputs.operation == 'publish-release'
118+ if : env.OPERATION == 'publish-release'
113119 run : npm run build:npm
114120
115121 # Publish release version
116122 - name : Publish npm package (release)
117- if : inputs.operation == 'publish-release'
123+ if : env.OPERATION == 'publish-release'
118124 run : npm publish
119125
120126 # Publish prerelease version
121127 - name : Publish prerelease version
122- if : inputs.operation == 'publish-prerelease'
128+ if : env.OPERATION == 'publish-prerelease'
123129 uses : ./.github/actions/prerelease-npm-version
124130 with :
125131 version-override : ${{ inputs.version-override }}
126- preid : ${{ inputs.preid }}
127- dry_run : ${{ inputs.dry_run }}
132+ preid : ${{ inputs.preid || 'rc' }}
133+ dry_run : ${{ inputs.dry_run || false }}
128134
129135 # Deprecate old versions
130136 - name : Deprecate old versions
131- if : inputs.operation == 'deprecate-old-versions'
137+ if : env.OPERATION == 'deprecate-old-versions'
138+ env :
139+ # Ensure npm uses the registry URL for authentication
140+ NPM_CONFIG_REGISTRY : https://registry.npmjs.org/
132141 run : |
133142 # Get agent EoL table from NRQL
134143 response=$(curl -X POST https://api.newrelic.com/graphql \
@@ -166,5 +175,5 @@ jobs:
166175 done
167176
168177 outputs :
169- operation : ${{ inputs.operation }}
178+ operation : ${{ env.OPERATION }}
170179 success : ${{ job.status == 'success' }}
0 commit comments