Skip to content

Commit 47fdf62

Browse files
committed
feat: release signer alongside node
- move most of the release workflow out of `stacks-core` and into `actions`
1 parent c79fa6c commit 47fdf62

File tree

4 files changed

+128
-277
lines changed

4 files changed

+128
-277
lines changed

.github/workflows/ci.yml

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,30 @@ jobs:
5050
with:
5151
alias: "fmt-stacks"
5252

53-
######################################################################################
54-
## Check if the branch that this workflow is being run against is a release branch
53+
## Check if the head branch of the PR is a release branch
54+
##
55+
## Runs when the following is true:
56+
## - The workflow was triggered by a `workflow_dispatch` action
5557
check-release:
58+
if: |
59+
(
60+
github.event_name == 'workflow_dispatch'
61+
)
5662
name: Check Release
5763
needs:
5864
- rustfmt
5965
runs-on: ubuntu-latest
6066
outputs:
61-
tag: ${{ steps.check_release.outputs.tag }}
62-
docker_tag: ${{ steps.check_release.outputs.docker_tag }}
63-
is_release: ${{ steps.check_release.outputs.is_release }}
67+
node_tag: ${{ steps.check_release.outputs.node_tag }}
68+
node_docker_tag: ${{ steps.check_release.outputs.node_docker_tag }}
69+
signer_tag: ${{ steps.check_release.outputs.signer_tag }}
70+
signer_docker_tag: ${{ steps.check_release.outputs.signer_docker_tag }}
71+
is_node_release: ${{ steps.check_release.outputs.is_node_release }}
72+
is_signer_release: ${{ steps.check_release.outputs.is_signer_release }}
6473
steps:
6574
- name: Check Release
6675
id: check_release
67-
uses: stacks-network/actions/stacks-core/check-release@main
76+
uses: stacks-network/actions/stacks-core/release/check-release@main
6877
with:
6978
tag: ${{ github.ref_name }}
7079

@@ -75,15 +84,20 @@ jobs:
7584
## - it is a release run
7685
create-release:
7786
if: |
78-
needs.check-release.outputs.is_release == 'true'
79-
name: Create Release
87+
needs.check-release.outputs.is_node_release == 'true' ||
88+
needs.check-release.outputs.is_signer_release == 'true'
89+
name: Create Release(s)
8090
needs:
8191
- rustfmt
8292
- check-release
8393
uses: ./.github/workflows/github-release.yml
8494
with:
85-
tag: ${{ needs.check-release.outputs.tag }}
86-
docker_tag: ${{ needs.check-release.outputs.docker_tag }}
95+
node_tag: ${{ needs.check-release.outputs.node_tag }}
96+
node_docker_tag: ${{ needs.check-release.outputs.node_docker_tag }}
97+
signer_tag: ${{ needs.check-release.outputs.signer_tag }}
98+
signer_docker_tag: ${{ needs.check-release.outputs.signer_docker_tag }}
99+
is_node_release: ${{ needs.check-release.outputs.is_node_release }}
100+
is_signer_release: ${{ needs.check-release.outputs.is_signer_release }}
87101
secrets: inherit
88102

89103
## Build and push Debian image built from source
@@ -92,7 +106,7 @@ jobs:
92106
## - it is not a release run
93107
docker-image:
94108
if: |
95-
needs.check-release.outputs.is_release != 'true'
109+
needs.check-release.outputs.is_signer_release != 'true'
96110
name: Docker Image (Source)
97111
uses: ./.github/workflows/image-build-source.yml
98112
needs:
@@ -112,7 +126,7 @@ jobs:
112126
## - commit to either (development, master) branch
113127
create-cache:
114128
if: |
115-
needs.check-release.outputs.is_release == 'true' || (
129+
needs.check-release.outputs.is_node_release == 'true' || (
116130
github.event_name == 'workflow_dispatch' ||
117131
github.event_name == 'pull_request' ||
118132
github.event_name == 'merge_group' ||
@@ -144,7 +158,7 @@ jobs:
144158
## - commit to either (development, next, master) branch
145159
stacks-core-tests:
146160
if: |
147-
needs.check-release.outputs.is_release == 'true' || (
161+
needs.check-release.outputs.is_signer_release == 'true' || (
148162
github.event_name == 'workflow_dispatch' ||
149163
github.event_name == 'pull_request' ||
150164
github.event_name == 'merge_group' ||
@@ -166,7 +180,7 @@ jobs:
166180

167181
bitcoin-tests:
168182
if: |
169-
needs.check-release.outputs.is_release == 'true' || (
183+
needs.check-release.outputs.is_node_release == 'true' || (
170184
github.event_name == 'workflow_dispatch' ||
171185
github.event_name == 'pull_request' ||
172186
github.event_name == 'merge_group' ||
@@ -189,7 +203,7 @@ jobs:
189203

190204
p2p-tests:
191205
if: |
192-
needs.check-release.outputs.is_release == 'true' || (
206+
needs.check-release.outputs.is_node_release == 'true' || (
193207
github.event_name == 'workflow_dispatch' ||
194208
github.event_name == 'pull_request' ||
195209
github.event_name == 'merge_group' ||
@@ -214,7 +228,7 @@ jobs:
214228
## Runs when:
215229
## - it is a release run
216230
atlas-tests:
217-
if: needs.check-release.outputs.is_release == 'true'
231+
if: needs.check-release.outputs.is_node_release == 'true'
218232
name: Atlas Tests
219233
needs:
220234
- rustfmt
@@ -223,7 +237,7 @@ jobs:
223237
uses: ./.github/workflows/atlas-tests.yml
224238

225239
epoch-tests:
226-
if: needs.check-release.outputs.is_release == 'true'
240+
if: needs.check-release.outputs.is_node_release == 'true'
227241
name: Epoch Tests
228242
needs:
229243
- rustfmt
@@ -232,7 +246,7 @@ jobs:
232246
uses: ./.github/workflows/epoch-tests.yml
233247

234248
slow-tests:
235-
if: needs.check-release.outputs.is_release == 'true'
249+
if: needs.check-release.outputs.is_node_release == 'true'
236250
name: Slow Tests
237251
needs:
238252
- rustfmt

.github/workflows/create-source-binary.yml

Lines changed: 0 additions & 60 deletions
This file was deleted.

.github/workflows/github-release.yml

Lines changed: 96 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,28 @@ name: Github Release
55
on:
66
workflow_call:
77
inputs:
8-
tag:
9-
description: "Release Tag"
8+
node_tag:
9+
description: "Node Release Tag"
1010
required: true
1111
type: string
12-
docker_tag:
13-
description: "Docker Release Tag"
12+
node_docker_tag:
13+
description: "Node Docker Release Tag"
14+
required: true
15+
type: string
16+
signer_tag:
17+
description: "Signer Release Tag"
18+
required: true
19+
type: string
20+
signer_docker_tag:
21+
description: "Signer Docker Release Tag"
22+
required: true
23+
type: string
24+
is_node_release:
25+
description: "True if it is a node release"
26+
required: true
27+
type: string
28+
is_signer_release:
29+
description: "True if it is a signer release"
1430
required: true
1531
type: string
1632
secrets:
@@ -22,81 +38,107 @@ concurrency:
2238
## Always cancel duplicate jobs
2339
cancel-in-progress: true
2440

25-
run-name: ${{ inputs.tag }}
41+
run-name: ${{ inputs.node_tag || inputs.signer_tag }}
2642

2743
jobs:
2844
## Build arch dependent binaries from source
2945
##
3046
## Runs when the following is true:
31-
## - tag is provided
47+
## - either node or signer tag is provided
3248
build-binaries:
3349
if: |
34-
inputs.tag != ''
50+
inputs.node_tag != '' ||
51+
inputs.signer_tag != ''
3552
name: Build Binaries
36-
uses: ./.github/workflows/create-source-binary.yml
37-
with:
38-
tag: ${{ inputs.tag }}
39-
secrets: inherit
53+
runs-on: ubuntu-latest
54+
strategy:
55+
## Run a maximum of 10 builds concurrently, using the matrix defined in inputs.arch
56+
max-parallel: 10
57+
matrix:
58+
arch:
59+
- linux-musl
60+
- linux-glibc
61+
- macos
62+
- windows
63+
cpu:
64+
- arm64
65+
- armv7
66+
- x86-64 ## defaults to x86-64-v3 variant - intel haswell (2013) and newer
67+
# - x86-64-v2 ## intel nehalem (2008) and newer
68+
# - x86-64-v3 ## intel haswell (2013) and newer
69+
# - x86-64-v4 ## intel skylake (2017) and newer
70+
exclude:
71+
- arch: windows # excludes windows-arm64
72+
cpu: arm64
73+
- arch: windows # excludes windows-armv7
74+
cpu: armv7
75+
- arch: macos # excludes macos-armv7
76+
cpu: armv7
77+
steps:
78+
- name: Build Binary (${{ matrix.arch }}_${{ matrix.cpu }})
79+
uses: stacks-network/actions/stacks-core/release/create-source-binary@main
80+
with:
81+
arch: ${{ matrix.arch }}
82+
cpu: ${{ matrix.cpu }}
83+
node_tag: ${{ inputs.node_tag }}
84+
signer_tag: ${{ inputs.signer_tag }}
85+
signer_docker_tag: ${{ inputs.signer_docker_tag }}
86+
is_node_release: ${{ inputs.is_node_release }}
4087

4188
## Runs when the following is true:
42-
## - tag is provided
43-
## - workflow is building default branch (master)
89+
## - either node or signer tag is provided
4490
create-release:
4591
if: |
46-
inputs.tag != ''
92+
inputs.node_tag != '' ||
93+
inputs.signer_tag != ''
4794
name: Create Release
4895
runs-on: ubuntu-latest
4996
needs:
5097
- build-binaries
5198
steps:
52-
## Downloads the artifacts built in `create-source-binary.yml`
53-
- name: Download Artifacts
54-
id: download_artifacts
55-
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
56-
with:
57-
pattern: ${{ inputs.tag }}-binary-build-*
58-
path: release
59-
merge-multiple: true
60-
61-
## Generate a checksums file to be added to the release page
62-
- name: Generate Checksums
63-
id: generate_checksum
64-
uses: stacks-network/actions/generate-checksum@main
99+
## Creates releases
100+
- name: Create Release
101+
uses: stacks-network/actions/stacks-core/release/create-github-releases@main
65102
with:
66-
artifact_download_pattern: "${{ inputs.tag }}-binary-build-*"
67-
68-
## Upload the release archives with the checksums file
69-
- name: Upload Release
70-
id: upload_release
71-
uses: softprops/action-gh-release@69320dbe05506a9a39fc8ae11030b214ec2d1f87 #v2.0.5
72-
env:
73-
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
74-
with:
75-
name: Release ${{ inputs.tag || github.ref }}
76-
tag_name: ${{ inputs.tag || github.ref }}
77-
draft: false
78-
prerelease: true
79-
fail_on_unmatched_files: true
80-
target_commitish: ${{ github.sha }}
81-
generate_release_notes: true
82-
files: |
83-
release/*.zip
84-
CHECKSUMS.txt
103+
node_tag: ${{ inputs.node_tag }}
104+
node_docker_tag: ${{ inputs.node_docker_tag }}
105+
signer_tag: ${{ inputs.signer_tag }}
106+
signer_docker_tag: ${{ inputs.signer_docker_tag }}
107+
is_node_release: ${{ inputs.is_node_release }}
108+
is_signer_release: ${{ inputs.is_signer_release }}
109+
GH_TOKEN: ${{ secrets.GH_TOKEN }}
85110

86111
## Builds arch dependent Docker images from binaries
87112
##
88113
## Runs when the following is true:
89-
## - tag is provided
90-
## - workflow is building default branch (master)
114+
## - either node or signer tag is provided
91115
docker-image:
92116
if: |
93-
inputs.tag != ''
117+
inputs.node_tag != '' ||
118+
inputs.signer_tag != ''
94119
name: Docker Image (Binary)
95-
uses: ./.github/workflows/image-build-binary.yml
120+
runs-on: 'ubuntu-latest'
96121
needs:
97122
- build-binaries
98123
- create-release
99-
with:
100-
tag: ${{ inputs.tag }}
101-
docker_tag: ${{ inputs.docker_tag }}
102-
secrets: inherit
124+
strategy:
125+
fail-fast: false
126+
## Build a maximum of 2 images concurrently based on matrix.dist
127+
max-parallel: 2
128+
matrix:
129+
dist:
130+
- alpine
131+
- debian
132+
steps:
133+
- name: Create Docker Image
134+
uses: stacks-network/actions/stacks-core/release/create-docker-images@main
135+
with:
136+
node_tag: ${{ inputs.node_tag }}
137+
node_docker_tag: ${{ inputs.node_docker_tag }}
138+
signer_tag: ${{ inputs.signer_tag }}
139+
signer_docker_tag: ${{ inputs.signer_docker_tag }}
140+
is_node_release: ${{ inputs.is_node_release }}
141+
is_signer_release: ${{ inputs.is_signer_release }}
142+
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
143+
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
144+
dist: ${{ matrix.dist }}

0 commit comments

Comments
 (0)