Skip to content

Commit 49cdea7

Browse files
Update reusable-build-service.yml
1 parent bc93d59 commit 49cdea7

1 file changed

Lines changed: 234 additions & 7 deletions

File tree

.github/workflows/reusable-build-service.yml

Lines changed: 234 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,202 @@ on:
9191
required: true
9292
DOCKERHUB_TOKEN:
9393
required: true
94+
workflow_dispatch:
95+
inputs:
96+
service_name:
97+
description: "Name of the service"
98+
required: true
99+
type: string
100+
docker_image_name:
101+
description: "Docker image name from setup outputs"
102+
required: true
103+
type: string
104+
build_context:
105+
description: "Build context path"
106+
required: true
107+
type: string
108+
dockerfile_path:
109+
description: "Path to Dockerfile"
110+
required: true
111+
type: string
112+
build_release:
113+
description: "Build release flag"
114+
required: true
115+
type: string
116+
build_prerelease:
117+
description: "Build prerelease flag"
118+
required: true
119+
type: string
120+
release_version:
121+
description: "Release version"
122+
required: true
123+
type: string
124+
buildx_driver:
125+
description: "Buildx driver"
126+
required: true
127+
type: string
128+
buildx_version:
129+
description: "Buildx version"
130+
required: true
131+
type: string
132+
buildx_platforms:
133+
description: "Buildx platforms"
134+
required: true
135+
type: string
136+
buildx_endpoint:
137+
description: "Buildx endpoint"
138+
required: false
139+
type: string
140+
default: ""
141+
private_registry_push:
142+
description: "Push to private registry"
143+
required: false
144+
type: string
145+
default: "false"
146+
private_registry_username:
147+
description: "Private registry username"
148+
required: false
149+
type: string
150+
private_registry_token:
151+
description: "Private registry token"
152+
required: false
153+
type: string
154+
private_registry_addr:
155+
description: "Private registry address"
156+
required: false
157+
type: string
158+
private_registry_project:
159+
description: "Private registry project"
160+
required: false
161+
type: string
162+
build_args:
163+
description: "Additional build args (multiline)"
164+
required: false
165+
type: string
166+
generate_keypair:
167+
description: "Generate keypair for monitor service"
168+
required: false
169+
type: boolean
170+
default: false
171+
target_branch:
172+
description: "Target branch name"
173+
required: false
174+
type: string
175+
default_private_key:
176+
description: "Default private key for non-master branches"
177+
required: false
178+
type: string
179+
secrets:
180+
DOCKERHUB_USERNAME:
181+
required: true
182+
DOCKERHUB_TOKEN:
183+
required: true
184+
workflow_dispatch:
185+
inputs:
186+
service_name:
187+
description: "Name of the service"
188+
required: true
189+
type: choice
190+
options:
191+
- Admin
192+
- Web
193+
- Space
194+
- Live Collaboration
195+
- Silo
196+
- API Server
197+
- Proxy
198+
- Monitor
199+
- Email
200+
- Plane PI
201+
docker_image_name:
202+
description: "Docker image name (e.g., web-commercial)"
203+
required: true
204+
type: string
205+
build_context:
206+
description: "Build context path (e.g., . or ./apps/api)"
207+
required: true
208+
type: string
209+
dockerfile_path:
210+
description: "Path to Dockerfile (e.g., ./apps/web/Dockerfile.web)"
211+
required: true
212+
type: string
213+
build_release:
214+
description: "Build release flag"
215+
required: true
216+
type: boolean
217+
default: false
218+
build_prerelease:
219+
description: "Build prerelease flag"
220+
required: true
221+
type: boolean
222+
default: false
223+
release_version:
224+
description: "Release version (e.g., v1.0.0 or latest)"
225+
required: true
226+
type: string
227+
default: "latest"
228+
buildx_driver:
229+
description: "Buildx driver (docker-container or cloud)"
230+
required: true
231+
type: choice
232+
default: "docker-container"
233+
options:
234+
- docker-container
235+
- cloud
236+
buildx_version:
237+
description: "Buildx version"
238+
required: true
239+
type: string
240+
default: "latest"
241+
buildx_platforms:
242+
description: "Buildx platforms (e.g., linux/amd64 or linux/amd64,linux/arm64)"
243+
required: true
244+
type: string
245+
default: "linux/amd64"
246+
buildx_endpoint:
247+
description: "Buildx endpoint (leave empty for docker-container)"
248+
required: false
249+
type: string
250+
default: ""
251+
private_registry_push:
252+
description: "Push to private registry"
253+
required: false
254+
type: boolean
255+
default: false
256+
private_registry_username:
257+
description: "Private registry username"
258+
required: false
259+
type: string
260+
private_registry_token:
261+
description: "Private registry token"
262+
required: false
263+
type: string
264+
private_registry_addr:
265+
description: "Private registry address"
266+
required: false
267+
type: string
268+
private_registry_project:
269+
description: "Private registry project"
270+
required: false
271+
type: string
272+
build_args:
273+
description: "Additional build args (multiline, optional)"
274+
required: false
275+
type: string
276+
generate_keypair:
277+
description: "Generate keypair for monitor service"
278+
required: false
279+
type: boolean
280+
default: false
281+
target_branch:
282+
description: "Target branch name (for keypair generation)"
283+
required: false
284+
type: string
285+
default: "master"
286+
default_private_key:
287+
description: "Default private key for non-master branches"
288+
required: false
289+
type: string
94290

95291
jobs:
96292
build_push_service:
@@ -101,13 +297,24 @@ jobs:
101297
uses: actions/checkout@v4
102298

103299
- name: Generate Keypair
104-
if: inputs.generate_keypair == true
300+
if: inputs.service_name == 'Monitor' || inputs.generate_keypair == true || inputs.generate_keypair == 'true'
105301
id: generate_keypair
106302
run: |
107-
if [ "${{ inputs.target_branch }}" == "master" ] || [ "${{ inputs.build_release }}" == "true" ]; then
303+
# Determine target branch - use input if provided, otherwise use GitHub ref
304+
TARGET_BRANCH="${{ inputs.target_branch }}"
305+
if [ -z "$TARGET_BRANCH" ]; then
306+
TARGET_BRANCH="${GITHUB_REF#refs/heads/}"
307+
fi
308+
BUILD_RELEASE="${{ inputs.build_release }}"
309+
if [ "$TARGET_BRANCH" == "master" ] || [ "$BUILD_RELEASE" == "true" ] || [ "$BUILD_RELEASE" == true ]; then
108310
openssl genrsa -out private_key.pem 2048
109311
else
110-
echo "${{ inputs.default_private_key }}" > private_key.pem
312+
if [ -n "${{ inputs.default_private_key }}" ]; then
313+
echo "${{ inputs.default_private_key }}" > private_key.pem
314+
else
315+
echo "Warning: No default private key provided, generating new keypair"
316+
openssl genrsa -out private_key.pem 2048
317+
fi
111318
fi
112319
openssl rsa -in private_key.pem -pubout -out public_key.pem
113320
cat public_key.pem
@@ -124,7 +331,7 @@ jobs:
124331
if [ -n "${{ inputs.build_args }}" ]; then
125332
echo "${{ inputs.build_args }}" >> "$BUILD_ARGS_FILE"
126333
fi
127-
if [ "${{ inputs.generate_keypair }}" == "true" ] && [ -n "${{ env.PRIVATE_KEY }}" ]; then
334+
if ([ "${{ inputs.service_name }}" == "Monitor" ] || [ "${{ inputs.generate_keypair }}" == "true" ] || [ "${{ inputs.generate_keypair }}" == true ]) && [ -n "${{ env.PRIVATE_KEY }}" ]; then
128335
echo "PRIVATE_KEY=${{ env.PRIVATE_KEY }}" >> "$BUILD_ARGS_FILE"
129336
fi
130337
if [ -s "$BUILD_ARGS_FILE" ]; then
@@ -135,15 +342,35 @@ jobs:
135342
fi
136343
rm -f "$BUILD_ARGS_FILE"
137344
345+
- name: Prepare Build Flags
346+
id: prepare_flags
347+
run: |
348+
# Convert boolean/string to proper string format
349+
if [ "${{ inputs.build_release }}" == "true" ] || [ "${{ inputs.build_release }}" == true ]; then
350+
echo "build_release=true" >> $GITHUB_OUTPUT
351+
else
352+
echo "build_release=false" >> $GITHUB_OUTPUT
353+
fi
354+
if [ "${{ inputs.build_prerelease }}" == "true" ] || [ "${{ inputs.build_prerelease }}" == true ]; then
355+
echo "build_prerelease=true" >> $GITHUB_OUTPUT
356+
else
357+
echo "build_prerelease=false" >> $GITHUB_OUTPUT
358+
fi
359+
if [ "${{ inputs.private_registry_push }}" == "true" ] || [ "${{ inputs.private_registry_push }}" == true ]; then
360+
echo "private_registry_push=true" >> $GITHUB_OUTPUT
361+
else
362+
echo "private_registry_push=${{ inputs.private_registry_push }}" >> $GITHUB_OUTPUT
363+
fi
364+
138365
- name: ${{ inputs.service_name }} Build and Push
139366
uses: makeplane/actions/build-push@v1.1.0
140367
with:
141-
build-release: ${{ inputs.build_release }}
142-
build-prerelease: ${{ inputs.build_prerelease }}
368+
build-release: ${{ steps.prepare_flags.outputs.build_release }}
369+
build-prerelease: ${{ steps.prepare_flags.outputs.build_prerelease }}
143370
release-version: ${{ inputs.release_version }}
144371
dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
145372
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
146-
private-registry-push: ${{ inputs.private_registry_push }}
373+
private-registry-push: ${{ steps.prepare_flags.outputs.private_registry_push }}
147374
private-registry-username: ${{ inputs.private_registry_username }}
148375
private-registry-token: ${{ inputs.private_registry_token }}
149376
private-registry-addr: ${{ inputs.private_registry_addr }}

0 commit comments

Comments
 (0)