Skip to content

Commit 0129a69

Browse files
author
kaixuanxu
committed
fix: json
1 parent 18f3592 commit 0129a69

File tree

2 files changed

+65
-17
lines changed

2 files changed

+65
-17
lines changed
Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
name: Validate template
2-
32
description: Validate ADF template
43

54
inputs:
65
path:
76
required: true
8-
description: Project root
7+
description: Project root path
98
directory:
109
required: false
1110
description: Template directory
11+
default: ''
1212

1313
outputs:
1414
status:
15-
description: Validate status
15+
description: Validation exit code (0 = success, non-zero = failure)
1616
value: ${{ steps.validate-template.outputs.status }}
1717
detail:
18-
description: Validate detail
18+
description: Validation details or error message
1919
value: ${{ steps.validate-template.outputs.detail }}
2020

2121
runs:
2222
using: composite
2323
steps:
2424
- name: Setup Deno environment
25-
uses: denoland/setup-deno@v1
25+
uses: denoland/setup-deno@v2
2626
with:
2727
deno-version: v1.x
2828

@@ -31,12 +31,41 @@ runs:
3131
env:
3232
INPUT_PATH: ${{ inputs.path }}
3333
INPUT_DIRECTORY: ${{ inputs.directory }}
34-
ACTION_PATH: ${{ github.action_path }}
3534
shell: bash
3635
run: |
37-
result=$(deno run --allow-read "${ACTION_PATH}/src/main.ts" "${INPUT_PATH}" "${INPUT_DIRECTORY}")
38-
# Parse JSON and extract status and detail separately
39-
status=$(echo "$result" | jq -r '.status')
40-
detail=$(echo "$result" | jq -r '.detail')
36+
set -euo pipefail
37+
38+
# Run validation script
39+
if ! result=$(deno run --allow-read "${{ github.action_path }}/src/main.ts" "${INPUT_PATH}" "${INPUT_DIRECTORY}" 2>&1); then
40+
echo "status=1" >> "$GITHUB_OUTPUT"
41+
# Handle multi-line error output using heredoc
42+
{
43+
echo "detail<<EOF"
44+
echo "Deno execution failed: ${result}"
45+
echo "EOF"
46+
} >> "$GITHUB_OUTPUT"
47+
exit 0 # Don't fail the step, let caller handle status
48+
fi
49+
50+
# Validate JSON output
51+
if ! echo "$result" | jq empty 2>/dev/null; then
52+
echo "status=1" >> "$GITHUB_OUTPUT"
53+
{
54+
echo "detail<<EOF"
55+
echo "Invalid JSON output from validation script: ${result}"
56+
echo "EOF"
57+
} >> "$GITHUB_OUTPUT"
58+
exit 0
59+
fi
60+
61+
# Extract status and detail from JSON response
62+
status=$(echo "$result" | jq -r '.status // 1')
63+
detail=$(echo "$result" | jq -r '.detail // "No details provided"')
64+
4165
echo "status=${status}" >> "$GITHUB_OUTPUT"
42-
echo "detail=${detail}" >> "$GITHUB_OUTPUT"
66+
# Handle potential multi-line detail content
67+
{
68+
echo "detail<<EOF"
69+
echo "${detail}"
70+
echo "EOF"
71+
} >> "$GITHUB_OUTPUT"
Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,46 @@
11
name: Template Validation
2+
23
on:
34
pull_request_target:
45
branches:
56
- main
7+
types: [opened, synchronize, reopened]
68

79
workflow_dispatch:
810

11+
permissions:
12+
contents: read
13+
pull-requests: write
14+
915
jobs:
1016
validate:
1117
runs-on: ubuntu-latest
18+
timeout-minutes: 10
1219

1320
steps:
14-
- uses: actions/checkout@v2
21+
- name: Checkout repository
22+
uses: actions/checkout@v4
23+
with:
24+
ref: ${{ github.event.pull_request.head.sha }}
1525

1626
- name: Validate template
1727
id: validate-template
1828
uses: ./.github/actions/validate-template
1929
with:
20-
path: $GITHUB_WORKSPACE
30+
path: ${{ github.workspace }}
2131

22-
- name: Create comment
23-
if: ${{ steps.validate-template.outputs.status != 0 && !github.event.pull_request.head.repo.fork }}
24-
uses: peter-evans/create-or-update-comment@v1
32+
- name: Create or update comment on failure
33+
if: ${{ steps.validate-template.outputs.status != '0' && github.event_name == 'pull_request_target' && !github.event.pull_request.head.repo.fork }}
34+
uses: peter-evans/create-or-update-comment@v4
2535
with:
2636
issue-number: ${{ github.event.pull_request.number }}
27-
body: ${{ steps.validate-template.outputs.detail }}
37+
body: |
38+
## ❌ Template Validation Failed
39+
40+
${{ steps.validate-template.outputs.detail }}
41+
42+
- name: Fail workflow if validation failed
43+
if: ${{ steps.validate-template.outputs.status != '0' }}
44+
run: |
45+
echo "::error::Template validation failed"
46+
exit 1

0 commit comments

Comments
 (0)