4343 determine-projects :
4444 name : Determine Projects to Deploy
4545 runs-on : ubuntu-latest
46+ container :
47+ image : node:20-bookworm-slim
4648 outputs :
4749 projects : ${{ steps.filter.outputs.projects }}
4850 projects_json : ${{ steps.filter.outputs.projects_json }}
@@ -66,35 +68,51 @@ jobs:
6668 id : filter
6769 shell : bash
6870 run : |
69- # Read config JSON
70- CONFIG_JSON="${{ steps.config.outputs.config_json }}"
71+ # Use Node.js to parse JSON (already available in container)
72+ node << 'EOF'
73+ const fs = require('fs');
74+ const configJson = `${{ steps.config.outputs.config_json }}`;
75+ const config = JSON.parse(configJson);
7176
72- # Manual trigger: deploy specific project or all
73- if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
74- if [ -n "${{ inputs.project_name }}" ]; then
75- # Find specific project using jq
76- PROJECT=$(echo "$CONFIG_JSON" | jq -r --arg name "${{ inputs.project_name }}" '.projects[] | select(.name == $name)')
77- if [ -n "$PROJECT" ] && [ "$PROJECT" != "null" ]; then
78- echo "projects_json=[$PROJECT]" >> "$GITHUB_OUTPUT"
79- echo "projects=[\"${{ inputs.project_name }}\"]" >> "$GITHUB_OUTPUT"
80- exit 0
81- fi
82- fi
83- if [ "${{ inputs.force_deploy_all }}" == "true" ]; then
84- echo "projects_json=$(echo "$CONFIG_JSON" | jq -c '.projects')" >> "$GITHUB_OUTPUT"
85- echo "projects=$(echo "$CONFIG_JSON" | jq -c '[.projects[].name]')" >> "$GITHUB_OUTPUT"
86- exit 0
87- fi
88- fi
77+ const eventName = '${{ github.event_name }}';
78+ const projectName = '${{ inputs.project_name }}';
79+ const forceDeployAll = '${{ inputs.force_deploy_all }}' === 'true';
80+
81+ let projectsToDeploy = [];
82+
83+ // Manual trigger: deploy specific project or all
84+ if (eventName === 'workflow_dispatch') {
85+ if (projectName) {
86+ const project = config.projects.find(p => p.name === projectName);
87+ if (project) {
88+ projectsToDeploy = [project];
89+ } else {
90+ projectsToDeploy = config.projects;
91+ }
92+ } else if (forceDeployAll) {
93+ projectsToDeploy = config.projects;
94+ } else {
95+ projectsToDeploy = config.projects;
96+ }
97+ } else {
98+ // For push events, deploy all projects
99+ projectsToDeploy = config.projects;
100+ }
101+
102+ // Output results
103+ const outputFile = process.env.GITHUB_OUTPUT;
104+ const projectsJson = JSON.stringify(projectsToDeploy);
105+ const projectsNames = JSON.stringify(projectsToDeploy.map(p => p.name));
89106
90- # For push events or default, deploy all projects
91- echo "projects_json=$(echo "$CONFIG_JSON" | jq -c '. projects')" >> "$GITHUB_OUTPUT"
92- echo "projects=$(echo "$CONFIG_JSON" | jq -c '[.projects[].name]')" >> "$GITHUB_OUTPUT"
107+ fs.appendFileSync(outputFile, `projects_json<<EOF\n${projectsJson}\nEOF\n`);
108+ fs.appendFileSync(outputFile, ` projects=${projectsNames}\n`);
109+ EOF
93110
94111 - name : Show projects to deploy
95112 run : |
96113 echo "Projects to deploy: ${{ steps.filter.outputs.projects }}"
97- if [ "${{ steps.filter.outputs.projects }}" == "[]" ]; then
114+ PROJECTS="${{ steps.filter.outputs.projects }}"
115+ if [ "$PROJECTS" = "[]" ]; then
98116 echo "No projects to deploy"
99117 fi
100118
0 commit comments