1010 binary-name :
1111 type : string
1212 required : true
13- description : " The name of the crate/binary to build (from Cargo.toml, e.g., 'client' )"
13+ description : " The name of the crate/binary to build (from Cargo.toml)"
1414 binary-path :
1515 type : string
1616 required : false
1717 default : " "
18- description : " Optional: Path to crate directory (e.g., 'crates/client'). If empty, builds from workspace root using -p flag."
18+ description : " Path to crate directory (e.g., 'crates/client')"
19+ build-env :
20+ type : string
21+ required : false
22+ default : " "
23+ description : " Compile-time env vars (e.g., 'BASE_URL=https://example.com')"
24+ labels-to-check :
25+ type : string
26+ required : false
27+ default : ' ["github-release", "crates-release", "prerelease"]'
28+ description : " JSON array of PR labels to check for"
1929 prerelease :
2030 type : boolean
2131 required : false
2232 default : false
23- description : " Whether to create a prerelease "
33+ description : " Force prerelease (overrides label) "
2434 github-release :
2535 type : boolean
2636 required : false
2737 default : false
28- description : " Whether to create a GitHub release"
29- build-env :
30- type : string
31- required : false
32- default : " "
33- description : " Compile-time env vars for .env file (e.g., 'BASE_URL=https://example.com')"
38+ description : " Force GitHub release (overrides label)"
3439 crates-release :
3540 type : boolean
3641 required : false
3742 default : false
38- description : " Whether to publish to crates.io "
43+ description : " Force crates.io publish (overrides label) "
3944 dry-run :
4045 type : boolean
4146 required : false
4247 default : false
43- description : " Run publish commands in dry-run mode (no actual publishing)"
48+ description : " Run in dry-run mode (no actual publishing)"
4449 secrets :
4550 OPENAI_API_KEY :
4651 required : true
4752 description : " OpenAI API key for version and notes"
4853 CARGO_REGISTRY_TOKEN :
4954 required : false
50- description : " Crates.io API token (required if crates-release is true )"
55+ description : " Crates.io API token (required if crates-release)"
5156
5257jobs :
5358 check-labels :
@@ -56,42 +61,42 @@ jobs:
5661 pull-requests : read
5762 contents : read
5863 outputs :
59- has_github_release : ${{ steps.check-labels.outputs.has_github_release }}
60- has_crates_release : ${{ steps.check-labels.outputs.has_crates_release }}
61- has_prerelease : ${{ steps.check-labels.outputs.has_prerelease }}
64+ labels : ${{ steps.check.outputs.labels }}
6265 steps :
6366 - name : Check PR Labels
64- id : check-labels
67+ id : check
6568 uses : photon-hq/buildspace/.github/actions/check-pr-label@main
69+ with :
70+ labels : ${{ inputs.labels-to-check }}
6671
6772 release-info :
6873 needs : check-labels
6974 if : |
70- (needs.check-labels.outputs.has_github_release == 'true' || inputs.github-release) ||
71- (needs.check-labels.outputs.has_crates_release == 'true' || inputs.crates-release)
75+ fromJSON (needs.check-labels.outputs.labels).github-release || inputs.github-release ||
76+ fromJSON (needs.check-labels.outputs.labels).crates-release || inputs.crates-release
7277 runs-on : ubuntu-latest
7378 permissions :
7479 contents : read
7580 outputs :
76- version : ${{ steps.generate-release-info .outputs.version }}
77- release_notes : ${{ steps.generate-release-info .outputs.release_notes }}
81+ version : ${{ steps.generate.outputs.version }}
82+ release_notes : ${{ steps.generate.outputs.release_notes }}
7883 steps :
7984 - uses : actions/checkout@v5
8085 with :
8186 fetch-depth : 0
8287 - name : Generate Release Info
83- id : generate-release-info
88+ id : generate
8489 uses : photon-hq/buildspace/.github/actions/generate-release-info@main
85- with :
86- service-name : ${{ inputs.service-name }}
87- prerelease : ${{ inputs.prerelease || needs.check-labels.outputs.has_prerelease == 'true' }}
90+ with :
91+ service-name : ${{ inputs.service-name }}
92+ prerelease : ${{ inputs.prerelease || fromJSON( needs.check-labels.outputs.labels).prerelease }}
8893 openai-api-key : ${{ secrets.OPENAI_API_KEY }}
8994
9095 build :
9196 name : Build ${{ matrix.target }}
9297 runs-on : ${{ matrix.os }}
9398 needs : [check-labels, release-info]
94- if : needs.check-labels.outputs.has_github_release == 'true' || inputs.github-release
99+ if : fromJSON( needs.check-labels.outputs.labels).github-release || inputs.github-release
95100 strategy :
96101 fail-fast : false
97102 matrix :
@@ -111,39 +116,37 @@ jobs:
111116 binary-path : ${{ inputs.binary-path }}
112117 target : ${{ matrix.target }}
113118 build-env : ${{ inputs.build-env }}
114-
115119 - uses : actions/upload-artifact@v4
116120 with :
117121 name : ${{ inputs.binary-name }}-${{ matrix.target }}
118122 path : artifacts/*
119123
120124 github-release :
121125 needs : [check-labels, release-info, build]
122- if : needs.check-labels.outputs.has_github_release == 'true' || inputs.github-release
126+ if : fromJSON( needs.check-labels.outputs.labels).github-release || inputs.github-release
123127 runs-on : ubuntu-latest
124128 permissions :
125129 contents : write
126130 steps :
127131 - name : Create GitHub Release
128- id : create-release
129132 uses : photon-hq/buildspace/.github/actions/create-github-release@main
130- with :
131- version : ${{ needs.release-info.outputs.version }}
132- title : " ${{ inputs.service-name }} v${{ needs.release-info.outputs.version }}"
133- notes : ${{ needs.release-info.outputs.release_notes }}
134- prerelease : ${{ inputs.prerelease || needs.check-labels.outputs.has_prerelease == 'true' }}
135- artifact-pattern : ${{ inputs.binary-name }}-*
133+ with :
134+ version : ${{ needs.release-info.outputs.version }}
135+ title : " ${{ inputs.service-name }} v${{ needs.release-info.outputs.version }}"
136+ notes : ${{ needs.release-info.outputs.release_notes }}
137+ prerelease : ${{ inputs.prerelease || fromJSON( needs.check-labels.outputs.labels).prerelease }}
138+ artifact-pattern : ${{ inputs.binary-name }}-*
136139
137140 crates-publish :
138141 needs : [check-labels, release-info]
139- if : needs.check-labels.outputs.has_crates_release == 'true' || inputs.crates-release
142+ if : fromJSON( needs.check-labels.outputs.labels).crates-release || inputs.crates-release
140143 runs-on : ubuntu-latest
141144 steps :
142145 - uses : actions/checkout@v5
143146 - name : Publish to Crates.io
144147 uses : photon-hq/buildspace/.github/actions/publish-crates@main
145- with :
146- crate-name : ${{ inputs.binary-name }}
147- crate-path : ${{ inputs.binary-path }}
148+ with :
149+ crate-name : ${{ inputs.binary-name }}
150+ crate-path : ${{ inputs.binary-path }}
148151 dry-run : ${{ inputs.dry-run }}
149152 cargo-registry-token : ${{ secrets.CARGO_REGISTRY_TOKEN }}
0 commit comments