[ci] Add workflow to publish releases (#32487)
Adds a new workflow to publish runtime releases from NPM. Note that I commented out the actual publish command so I can test it out first.
lauren committed
Feb 27, 2025 at 13:07 UTC
227e8414cc5af227b5de339cace2447d4a81c995
1 file changed
+91
.github/workflows/runtime_releases_from_npm_manual.yml
new
+91
@@ -0,0 +1,91 @@
1
+name: (Runtime) Publish Releases from NPM Manual
2
+
3
+on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ version_to_promote:
7
+ required: true
8
+ description: Current npm version (non-experimental) to promote
9
+ type: string
10
+ version_to_publish:
11
+ required: true
12
+ description: Version to publish for the specified packages
13
+ type: string
14
+ only_packages:
15
+ description: Space separated list of packages to publish on NPM. Use this OR skip_packages, not together.
16
+ type: string
17
+ skip_packages:
18
+ description: Space separated list of packages to NOT publish on NPM. Use this OR only_packages, not together.
19
+ type: string
20
+ tags:
21
+ description: Space separated list of tags to tag the release with on NPM
22
+ type: string
23
+ default: "['untagged']"
24
+ dry:
25
+ required: true
26
+ description: Don't actually publish, just run a dry run
27
+ type: boolean
28
+ default: true
29
+ force_notify:
30
+ description: Force a Discord notification
31
+ type: boolean
32
+ default: false
33
+
34
+env:
35
+ TZ: /usr/share/zoneinfo/America/Los_Angeles
36
+ # https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
37
+ SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
38
+ GH_TOKEN: ${{ github.token }}
39
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
40
+
41
+jobs:
42
+ notify:
43
+ if: ${{ inputs.force_notify || inputs.dry == false || inputs.dry == 'false' }}
44
+ runs-on: ubuntu-latest
45
+ steps:
46
+ - name: Discord Webhook Action
47
+ uses: tsickert/discord-webhook@v6.0.0
48
+ with:
49
+ webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
50
+ embed-author-name: ${{ github.event.sender.login }}
51
+ embed-author-url: ${{ github.event.sender.html_url }}
52
+ embed-author-icon-url: ${{ github.event.sender.avatar_url }}
53
+ embed-title: '⚠️ Publishing release from NPM'
54
+ embed-description: |
55
+ ```
56
+ inputs: ${{ toJson(inputs) }}
57
+ ```
58
+ embed-url: https://github.com/facebook/react/actions/runs/${{ github.run_id }}
59
+
60
+ publish:
61
+ name: Publish releases
62
+ runs-on: ubuntu-latest
63
+ steps:
64
+ - uses: actions/checkout@v4
65
+ - uses: actions/setup-node@v4
66
+ with:
67
+ node-version-file: '.nvmrc'
68
+ cache: yarn
69
+ cache-dependency-path: yarn.lock
70
+ - name: Restore cached node_modules
71
+ uses: actions/cache@v4
72
+ id: node_modules
73
+ with:
74
+ path: "**/node_modules"
75
+ key: runtime-release-node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'scripts/release/yarn.lock') }}
76
+ - name: Ensure clean build directory
77
+ run: rm -rf build
78
+ - run: yarn install --frozen-lockfile
79
+ - run: yarn install --frozen-lockfile
80
+ working-directory: scripts/release
81
+ - run: cp ./scripts/release/ci-npmrc ~/.npmrc
82
+ - if: '${{ inputs.only_packages }}'
83
+ run: |
84
+ scripts/release/prepare-release-from-npm.js --skipTests --version=${{ inputs.version_to_promote }} --onlyPackages=${{ inputs.only_packages }}
85
+ ls -R build/node_modules
86
+ # scripts/release/publish.js --ci --tags=${{ inputs.tags }} --publishVersion=${{ inputs.version_to_publish }} --onlyPackages=${{ inputs.only_packages }} --dry=${{ inputs.dry || 'false' }}
87
+ - if: '${{ inputs.skip_packages }}'
88
+ run: |
89
+ scripts/release/prepare-release-from-npm.js --skipTests --version=${{ inputs.version_to_promote }} --skipPackages=${{ inputs.skip_packages }}
90
+ ls -R build/node_modules
91
+ # scripts/release/publish.js --ci --tags=${{ inputs.tags }} --publishVersion=${{ inputs.version_to_publish }} --skipPackages=${{ inputs.skip_packages }} --dry=${{ inputs.dry || 'false' }}