Skip to content

Commit ed8c415

Browse files
committed
fixed JSON parsing in workflow
1 parent d55b66e commit ed8c415

File tree

1 file changed

+41
-23
lines changed

1 file changed

+41
-23
lines changed

.github/workflows/deploy-ecosystem.yml

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ jobs:
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

Comments
 (0)