Skip to content

Commit cecc706

Browse files
committed
➕ Add new reusable workflow about parsing the release intent config for the common values in release system.
1 parent abcf142 commit cecc706

File tree

1 file changed

+290
-0
lines changed

1 file changed

+290
-0
lines changed
Lines changed: 290 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,290 @@
1+
name: Parse Project Configuration
2+
description: |
3+
Reusable workflow to parse the enhanced project configuration from intent.yaml
4+
and provide all configuration values as outputs to consuming workflows.
5+
6+
on:
7+
workflow_call:
8+
inputs:
9+
config-path:
10+
description: 'Path to the configuration file'
11+
required: false
12+
default: '.github/tag_and_release/intent.yaml'
13+
type: string
14+
15+
outputs:
16+
# Release Control
17+
do_release:
18+
description: 'Whether to proceed with release'
19+
value: ${{ jobs.parse-config.outputs.do_release }}
20+
level:
21+
description: 'Release level (auto/patch/minor/major)'
22+
value: ${{ jobs.parse-config.outputs.level }}
23+
notes:
24+
description: 'Release notes'
25+
value: ${{ jobs.parse-config.outputs.notes }}
26+
27+
# Artifact Control
28+
python:
29+
description: 'Python artifact handling (auto/force/skip)'
30+
value: ${{ jobs.parse-config.outputs.python }}
31+
docker:
32+
description: 'Docker artifact handling (auto/force/skip)'
33+
value: ${{ jobs.parse-config.outputs.docker }}
34+
docs:
35+
description: 'Docs artifact handling (auto/force/skip)'
36+
value: ${{ jobs.parse-config.outputs.docs }}
37+
38+
# Project Configuration
39+
project_name:
40+
description: 'Project name'
41+
value: ${{ jobs.parse-config.outputs.project_name }}
42+
package_name:
43+
description: 'Package name'
44+
value: ${{ jobs.parse-config.outputs.package_name }}
45+
base_branch:
46+
description: 'Base/main branch name'
47+
value: ${{ jobs.parse-config.outputs.base_branch }}
48+
49+
# Git Configuration
50+
git_commit_name:
51+
description: 'Git commit author name'
52+
value: ${{ jobs.parse-config.outputs.git_commit_name }}
53+
git_commit_email:
54+
description: 'Git commit author email'
55+
value: ${{ jobs.parse-config.outputs.git_commit_email }}
56+
57+
# Docker Configuration
58+
docker_registry_dockerhub:
59+
description: 'DockerHub registry URL'
60+
value: ${{ jobs.parse-config.outputs.docker_registry_dockerhub }}
61+
docker_registry_ghcr:
62+
description: 'GitHub Container Registry URL'
63+
value: ${{ jobs.parse-config.outputs.docker_registry_ghcr }}
64+
docker_health_check_port:
65+
description: 'Docker health check port'
66+
value: ${{ jobs.parse-config.outputs.docker_health_check_port }}
67+
docker_health_check_path:
68+
description: 'Docker health check path'
69+
value: ${{ jobs.parse-config.outputs.docker_health_check_path }}
70+
docker_app_env_var_name:
71+
description: 'Docker application environment variable name'
72+
value: ${{ jobs.parse-config.outputs.docker_app_env_var_name }}
73+
docker_app_env_var_value:
74+
description: 'Docker application environment variable value'
75+
value: ${{ jobs.parse-config.outputs.docker_app_env_var_value }}
76+
77+
# Validation Configuration
78+
validation_version:
79+
description: 'Version for validation runs'
80+
value: ${{ jobs.parse-config.outputs.validation_version }}
81+
validation_test_version:
82+
description: 'Version for validation testing'
83+
value: ${{ jobs.parse-config.outputs.validation_test_version }}
84+
85+
# Documentation Configuration
86+
docs_ci_cd_path:
87+
description: 'CI/CD documentation path'
88+
value: ${{ jobs.parse-config.outputs.docs_ci_cd_path }}
89+
docs_installation_path:
90+
description: 'Installation documentation path'
91+
value: ${{ jobs.parse-config.outputs.docs_installation_path }}
92+
docs_readme_path:
93+
description: 'README file path'
94+
value: ${{ jobs.parse-config.outputs.docs_readme_path }}
95+
docs_preview_branch:
96+
description: 'Documentation preview branch'
97+
value: ${{ jobs.parse-config.outputs.docs_preview_branch }}
98+
99+
jobs:
100+
parse-config:
101+
runs-on: ubuntu-latest
102+
outputs:
103+
# Release Control
104+
do_release: ${{ steps.parse.outputs.do_release }}
105+
level: ${{ steps.parse.outputs.level }}
106+
notes: ${{ steps.parse.outputs.notes }}
107+
108+
# Artifact Control
109+
python: ${{ steps.parse.outputs.python }}
110+
docker: ${{ steps.parse.outputs.docker }}
111+
docs: ${{ steps.parse.outputs.docs }}
112+
113+
# Project Configuration
114+
project_name: ${{ steps.parse.outputs.project_name }}
115+
package_name: ${{ steps.parse.outputs.package_name }}
116+
base_branch: ${{ steps.parse.outputs.base_branch }}
117+
118+
# Git Configuration
119+
git_commit_name: ${{ steps.parse.outputs.git_commit_name }}
120+
git_commit_email: ${{ steps.parse.outputs.git_commit_email }}
121+
122+
# Docker Configuration
123+
docker_registry_dockerhub: ${{ steps.parse.outputs.docker_registry_dockerhub }}
124+
docker_registry_ghcr: ${{ steps.parse.outputs.docker_registry_ghcr }}
125+
docker_health_check_port: ${{ steps.parse.outputs.docker_health_check_port }}
126+
docker_health_check_path: ${{ steps.parse.outputs.docker_health_check_path }}
127+
docker_app_env_var_name: ${{ steps.parse.outputs.docker_app_env_var_name }}
128+
docker_app_env_var_value: ${{ steps.parse.outputs.docker_app_env_var_value }}
129+
130+
# Validation Configuration
131+
validation_version: ${{ steps.parse.outputs.validation_version }}
132+
validation_test_version: ${{ steps.parse.outputs.validation_test_version }}
133+
134+
# Documentation Configuration
135+
docs_ci_cd_path: ${{ steps.parse.outputs.docs_ci_cd_path }}
136+
docs_installation_path: ${{ steps.parse.outputs.docs_installation_path }}
137+
docs_readme_path: ${{ steps.parse.outputs.docs_readme_path }}
138+
docs_preview_branch: ${{ steps.parse.outputs.docs_preview_branch }}
139+
140+
steps:
141+
- name: Checkout repository
142+
uses: actions/checkout@v4
143+
144+
- name: Install yq (YAML processor)
145+
run: |
146+
sudo wget -O /usr/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64
147+
sudo chmod +x /usr/bin/yq
148+
149+
- name: Parse configuration
150+
id: parse
151+
run: |
152+
config_file="${{ inputs.config-path }}"
153+
154+
# Check if config file exists
155+
if [[ ! -f "$config_file" ]]; then
156+
echo "⚠️ Configuration file not found: $config_file"
157+
echo "Using default values for all configuration options."
158+
use_defaults=true
159+
else
160+
echo "✅ Found configuration file: $config_file"
161+
use_defaults=false
162+
fi
163+
164+
# Function to get config value with fallback
165+
get_config() {
166+
local key="$1"
167+
local default="$2"
168+
169+
if [[ "$use_defaults" == "true" ]]; then
170+
echo "$default"
171+
else
172+
local value
173+
value=$(yq eval "$key" "$config_file" 2>/dev/null || echo "null")
174+
175+
if [[ "$value" == "null" || "$value" == "~" || -z "$value" ]]; then
176+
echo "$default"
177+
else
178+
echo "$value"
179+
fi
180+
fi
181+
}
182+
183+
# Parse Release Control
184+
do_release=$(get_config ".release" "true")
185+
level=$(get_config ".level" "auto")
186+
notes=$(get_config ".notes" "Automatic release based on configuration")
187+
188+
# Parse Artifact Control
189+
python=$(get_config ".artifacts.python" "auto")
190+
docker=$(get_config ".artifacts.docker" "auto")
191+
docs=$(get_config ".artifacts.docs.mode // .artifacts.docs" "auto")
192+
193+
# Parse Project Configuration
194+
project_name=$(get_config ".project.name" "${{ github.event.repository.name }}")
195+
package_name=$(get_config ".project.package_name" "${{ github.event.repository.name }}")
196+
base_branch=$(get_config ".project.base_branch" "master")
197+
198+
# Parse Git Configuration
199+
git_commit_name=$(get_config ".git.commit.name" "GitHub Actions Bot")
200+
git_commit_email=$(get_config ".git.commit.email" "[email protected]")
201+
202+
# Parse Docker Configuration
203+
docker_registry_dockerhub=$(get_config ".docker.registries.dockerhub" "docker.io")
204+
docker_registry_ghcr=$(get_config ".docker.registries.ghcr" "ghcr.io")
205+
docker_health_check_port=$(get_config ".docker.health_check.port" "8000")
206+
docker_health_check_path=$(get_config ".docker.health_check.path" "/health")
207+
docker_app_env_var_name=$(get_config ".docker.application.env_var_name" "API_TOKEN")
208+
docker_app_env_var_value=$(get_config ".docker.application.env_var_value" "test_token")
209+
210+
# Parse Validation Configuration
211+
validation_version=$(get_config ".validation.version" "1.0.0-validation")
212+
validation_test_version=$(get_config ".validation.test_version" "validation-test")
213+
214+
# Parse Documentation Configuration
215+
docs_ci_cd_path=$(get_config ".docs.paths.ci_cd" "docs/CI_CD.md")
216+
docs_installation_path=$(get_config ".docs.paths.installation" "docs/INSTALLATION.md")
217+
docs_readme_path=$(get_config ".docs.paths.readme" "README.md")
218+
docs_preview_branch=$(get_config ".docs.preview.branch" "docs-preview")
219+
220+
# Set outputs
221+
echo "do_release=$do_release" >> $GITHUB_OUTPUT
222+
echo "level=$level" >> $GITHUB_OUTPUT
223+
echo "notes=$notes" >> $GITHUB_OUTPUT
224+
225+
echo "python=$python" >> $GITHUB_OUTPUT
226+
echo "docker=$docker" >> $GITHUB_OUTPUT
227+
echo "docs=$docs" >> $GITHUB_OUTPUT
228+
229+
echo "project_name=$project_name" >> $GITHUB_OUTPUT
230+
echo "package_name=$package_name" >> $GITHUB_OUTPUT
231+
echo "base_branch=$base_branch" >> $GITHUB_OUTPUT
232+
233+
echo "git_commit_name=$git_commit_name" >> $GITHUB_OUTPUT
234+
echo "git_commit_email=$git_commit_email" >> $GITHUB_OUTPUT
235+
236+
echo "docker_registry_dockerhub=$docker_registry_dockerhub" >> $GITHUB_OUTPUT
237+
echo "docker_registry_ghcr=$docker_registry_ghcr" >> $GITHUB_OUTPUT
238+
echo "docker_health_check_port=$docker_health_check_port" >> $GITHUB_OUTPUT
239+
echo "docker_health_check_path=$docker_health_check_path" >> $GITHUB_OUTPUT
240+
echo "docker_app_env_var_name=$docker_app_env_var_name" >> $GITHUB_OUTPUT
241+
echo "docker_app_env_var_value=$docker_app_env_var_value" >> $GITHUB_OUTPUT
242+
243+
echo "validation_version=$validation_version" >> $GITHUB_OUTPUT
244+
echo "validation_test_version=$validation_test_version" >> $GITHUB_OUTPUT
245+
246+
echo "docs_ci_cd_path=$docs_ci_cd_path" >> $GITHUB_OUTPUT
247+
echo "docs_installation_path=$docs_installation_path" >> $GITHUB_OUTPUT
248+
echo "docs_readme_path=$docs_readme_path" >> $GITHUB_OUTPUT
249+
echo "docs_preview_branch=$docs_preview_branch" >> $GITHUB_OUTPUT
250+
251+
# Display parsed configuration
252+
echo ""
253+
echo "📋 Parsed Configuration:"
254+
echo "===================="
255+
echo "Release Control:"
256+
echo " - Do Release: $do_release"
257+
echo " - Level: $level"
258+
echo " - Notes: $notes"
259+
echo ""
260+
echo "Artifacts:"
261+
echo " - Python: $python"
262+
echo " - Docker: $docker"
263+
echo " - Docs: $docs"
264+
echo ""
265+
echo "Project:"
266+
echo " - Name: $project_name"
267+
echo " - Package: $package_name"
268+
echo " - Base Branch: $base_branch"
269+
echo ""
270+
echo "Git:"
271+
echo " - Commit Name: $git_commit_name"
272+
echo " - Commit Email: $git_commit_email"
273+
echo ""
274+
echo "Docker:"
275+
echo " - DockerHub: $docker_registry_dockerhub"
276+
echo " - GHCR: $docker_registry_ghcr"
277+
echo " - Health Port: $docker_health_check_port"
278+
echo " - Health Path: $docker_health_check_path"
279+
echo " - App Env Name: $docker_app_env_var_name"
280+
echo " - App Env Value: $docker_app_env_var_value"
281+
echo ""
282+
echo "Validation:"
283+
echo " - Version: $validation_version"
284+
echo " - Test Version: $validation_test_version"
285+
echo ""
286+
echo "Documentation:"
287+
echo " - CI/CD Path: $docs_ci_cd_path"
288+
echo " - Installation Path: $docs_installation_path"
289+
echo " - README Path: $docs_readme_path"
290+
echo " - Preview Branch: $docs_preview_branch"

0 commit comments

Comments
 (0)