-
-
Notifications
You must be signed in to change notification settings - Fork 21
134 lines (113 loc) · 5.15 KB
/
Copy pathrelease-experimental.yml
File metadata and controls
134 lines (113 loc) · 5.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
name: Release (experimental) 📦
on:
push:
branches:
- main
permissions:
id-token: write # Necessary for GitHub Actions to authenticate with external services
actions: write # Necessary to cancel workflow executions
checks: write # Necessary to write reports
pull-requests: write # Necessary to comment on PRs
contents: write # Necessary to create a release
concurrency:
group: ${{ github.workflow }}-${{ github.sha }}
cancel-in-progress: true
jobs:
changed:
name: Get changed files 📂
if: ${{ github.repository == 'lazarv/react-server' }}
runs-on: ubuntu-latest
outputs:
should_skip: ${{ steps.changed-files.outputs.any_changed != 'true' }}
all_changed_files: ${{ steps.changed-files.outputs.all_changed_files }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# Assume PRs are less than 50 commits
fetch-depth: 50
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v45
with:
files: |
packages/**
release:
name: Release 📦
needs: changed
if: github.repository == 'lazarv/react-server' && needs.changed.outputs.should_skip != 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v4.0.0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 24
cache: "pnpm"
registry-url: https://registry.npmjs.org
- name: Install dependencies
run: pnpm install
- name: Generate version
run: |
VERSION="0.0.0-experimental-$(git rev-parse --short HEAD)-$(date +'%Y%m%d')-$(openssl rand -hex 4)"
echo "VERSION=$VERSION" >> $GITHUB_ENV
- name: Prepare @lazarv/rsc
id: prepare-rsc
if: contains(needs.changed.outputs.all_changed_files, 'packages/rsc')
working-directory: ./packages/rsc
run: |
jq --arg new_version "${{ env.VERSION }}" '.version = $new_version' package.json > tmp.json && mv tmp.json package.json
- name: Publish @lazarv/rsc
id: publish-rsc
if: steps.prepare-rsc.outcome == 'success'
working-directory: ./packages/rsc
run: pnpm publish --provenance --access=public --tag=latest
- name: Update @lazarv/react-server dependency on @lazarv/rsc
if: steps.publish-rsc.outcome == 'success'
working-directory: ./packages/react-server
run: |
jq --arg new_version "${{ env.VERSION }}" '.dependencies["@lazarv/rsc"] = $new_version' package.json > tmp.json && mv tmp.json package.json
- name: Get latest @lazarv/rsc version for @lazarv/react-server
if: contains(needs.changed.outputs.all_changed_files, 'packages/react-server') && steps.publish-rsc.outcome != 'success'
working-directory: ./packages/react-server
run: |
RSC_VERSION=$(npm view @lazarv/rsc version 2>/dev/null || echo "")
if [ -n "$RSC_VERSION" ]; then
jq --arg new_version "$RSC_VERSION" '.dependencies["@lazarv/rsc"] = $new_version' package.json > tmp.json && mv tmp.json package.json
fi
- name: Prepare @lazarv/react-server
id: prepare-react-server
if: contains(needs.changed.outputs.all_changed_files, 'packages/react-server') || steps.publish-rsc.outcome == 'success'
working-directory: ./packages/react-server
run: |
jq --arg new_version "${{ env.VERSION }}" '.version = $new_version' package.json > tmp.json && mv tmp.json package.json
- name: Publish @lazarv/react-server
id: publish-react-server
if: steps.prepare-react-server.outcome == 'success'
working-directory: ./packages/react-server
run: pnpm publish --provenance --access=public --tag=latest
- name: Create release
if: steps.publish-react-server.outcome == 'success' || steps.publish-rsc.outcome == 'success'
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release create "v${{ env.VERSION }}" --generate-notes
- name: Get latest experimental @lazarv/react-server version
id: get-latest-experimental-react-server-version
if: contains(needs.changed.outputs.all_changed_files, 'packages/create-react-server')
working-directory: ./packages/react-server
run: |
jq --arg new_version $(npm view @lazarv/react-server version) '.version = $new_version' package.json > tmp.json && mv tmp.json package.json
- name: Prepare @lazarv/create-react-server
id: prepare-create-react-server
if: contains(needs.changed.outputs.all_changed_files, 'packages/create-react-server')
working-directory: ./packages/create-react-server
run: |
jq --arg new_version "${{ env.VERSION }}" '.version = $new_version' package.json > tmp.json && mv tmp.json package.json
- name: Publish @lazarv/create-react-server
if: steps.prepare-create-react-server.outcome == 'success'
working-directory: ./packages/create-react-server
run: pnpm publish --provenance --access=public --tag=latest