Skip to content

Commit 422f759

Browse files
committed
Enhance CI/CD workflow with comprehensive testing
- Add lint, format, and typecheck validation - Implement proper unit and integration test separation - Add validation for all action outputs and edge cases - Include deterministic behavior testing - Test template formatting functionality
1 parent 203082b commit 422f759

4 files changed

Lines changed: 127 additions & 14 deletions

File tree

.github/workflows/test.yml

Lines changed: 124 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,37 @@ name: Test
33
on:
44
pull_request:
55
branches: [main]
6+
push:
7+
branches: [main]
68

79
jobs:
8-
test:
10+
lint-and-test:
911
runs-on: ubuntu-latest
12+
name: Lint, Format & Unit Tests
13+
14+
steps:
15+
- uses: actions/checkout@v4
16+
- uses: actions/setup-node@v4
17+
with:
18+
node-version: "24"
19+
cache: "npm"
20+
- run: npm ci
21+
22+
# Run code quality checks
23+
- run: npm run format:check
24+
- run: npm run lint
25+
- run: npm run typecheck
26+
27+
# Run unit tests
28+
- run: npm test
29+
30+
# Build the action
31+
- run: npm run build
32+
33+
integration-test:
34+
runs-on: ubuntu-latest
35+
name: Integration Tests
36+
needs: lint-and-test
1037

1138
steps:
1239
- uses: actions/checkout@v4
@@ -23,10 +50,19 @@ jobs:
2350
env:
2451
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2552

26-
- name: Print auto-detected result
53+
- name: Validate auto-detected result
2754
run: |
28-
echo "PR Number: ${{ steps.auto.outputs.number }}"
29-
echo "Codename: ${{ steps.auto.outputs.codename }}"
55+
if [ -z "${{ steps.auto.outputs.number }}" ]; then
56+
echo "❌ Error: No number output from auto-detect test"
57+
exit 1
58+
fi
59+
if [ -z "${{ steps.auto.outputs.codename }}" ]; then
60+
echo "❌ Error: No codename output from auto-detect test"
61+
exit 1
62+
fi
63+
echo "✅ Auto-detect test passed:"
64+
echo " PR Number: ${{ steps.auto.outputs.number }}"
65+
echo " Codename: ${{ steps.auto.outputs.codename }}"
3066
3167
- name: Test explicit number
3268
id: explicit
@@ -36,10 +72,19 @@ jobs:
3672
env:
3773
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3874

39-
- name: Print explicit result
75+
- name: Validate explicit result
4076
run: |
41-
echo "Explicit Number: ${{ steps.explicit.outputs.number }}"
42-
echo "Explicit Codename: ${{ steps.explicit.outputs.codename }}"
77+
if [ "${{ steps.explicit.outputs.number }}" != "123" ]; then
78+
echo "❌ Error: Expected number 123, got ${{ steps.explicit.outputs.number }}"
79+
exit 1
80+
fi
81+
if [ -z "${{ steps.explicit.outputs.codename }}" ]; then
82+
echo "❌ Error: No codename output from explicit test"
83+
exit 1
84+
fi
85+
echo "✅ Explicit number test passed:"
86+
echo " Number: ${{ steps.explicit.outputs.number }}"
87+
echo " Codename: ${{ steps.explicit.outputs.codename }}"
4388
4489
- name: Test with template
4590
id: template
@@ -50,8 +95,76 @@ jobs:
5095
env:
5196
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5297

53-
- name: Print template result
98+
- name: Validate template result
99+
run: |
100+
if [ "${{ steps.template.outputs.number }}" != "456" ]; then
101+
echo "❌ Error: Expected number 456, got ${{ steps.template.outputs.number }}"
102+
exit 1
103+
fi
104+
if [ -z "${{ steps.template.outputs.codename }}" ]; then
105+
echo "❌ Error: No codename output from template test"
106+
exit 1
107+
fi
108+
if [ -z "${{ steps.template.outputs.formatted }}" ]; then
109+
echo "❌ Error: No formatted output from template test"
110+
exit 1
111+
fi
112+
# Check that formatted output contains expected pattern
113+
if [[ ! "${{ steps.template.outputs.formatted }}" =~ ^env-.*-456$ ]]; then
114+
echo "❌ Error: Formatted output doesn't match expected pattern 'env-{codename}-456'"
115+
echo " Got: ${{ steps.template.outputs.formatted }}"
116+
exit 1
117+
fi
118+
echo "✅ Template test passed:"
119+
echo " Number: ${{ steps.template.outputs.number }}"
120+
echo " Codename: ${{ steps.template.outputs.codename }}"
121+
echo " Formatted: ${{ steps.template.outputs.formatted }}"
122+
123+
- name: Test deterministic behavior
124+
id: deterministic1
125+
uses: ./
126+
with:
127+
number: 999
128+
env:
129+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
130+
131+
- name: Test deterministic behavior (repeat)
132+
id: deterministic2
133+
uses: ./
134+
with:
135+
number: 999
136+
env:
137+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
138+
139+
- name: Validate deterministic behavior
140+
run: |
141+
if [ "${{ steps.deterministic1.outputs.codename }}" != "${{ steps.deterministic2.outputs.codename }}" ]; then
142+
echo "❌ Error: Same number produced different codenames (not deterministic)"
143+
echo " First run: ${{ steps.deterministic1.outputs.codename }}"
144+
echo " Second run: ${{ steps.deterministic2.outputs.codename }}"
145+
exit 1
146+
fi
147+
echo "✅ Deterministic behavior test passed:"
148+
echo " Number: 999 consistently produces: ${{ steps.deterministic1.outputs.codename }}"
149+
150+
- name: Test edge case - zero
151+
id: edge_zero
152+
uses: ./
153+
with:
154+
number: 0
155+
env:
156+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
157+
158+
- name: Validate edge case - zero
54159
run: |
55-
echo "Template Number: ${{ steps.template.outputs.number }}"
56-
echo "Template Codename: ${{ steps.template.outputs.codename }}"
57-
echo "Template Formatted: ${{ steps.template.outputs.formatted }}"
160+
if [ "${{ steps.edge_zero.outputs.number }}" != "0" ]; then
161+
echo "❌ Error: Expected number 0, got ${{ steps.edge_zero.outputs.number }}"
162+
exit 1
163+
fi
164+
if [ -z "${{ steps.edge_zero.outputs.codename }}" ]; then
165+
echo "❌ Error: No codename output for edge case zero"
166+
exit 1
167+
fi
168+
echo "✅ Edge case (zero) test passed:"
169+
echo " Number: ${{ steps.edge_zero.outputs.number }}"
170+
echo " Codename: ${{ steps.edge_zero.outputs.codename }}"

dist/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29884,7 +29884,7 @@ async function getNumber() {
2988429884
const explicitNumber = (0,_actions_core__WEBPACK_IMPORTED_MODULE_0__.getInput)("number");
2988529885
if (explicitNumber) {
2988629886
const parsed = parseInt(explicitNumber, 10);
29887-
if (isNaN(parsed) || parsed <= 0) {
29887+
if (isNaN(parsed) || parsed < 0) {
2988829888
console.log(`Invalid number input: "${explicitNumber}"`);
2988929889
return null;
2989029890
}

dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ async function getNumber(): Promise<number | null> {
5555
const explicitNumber = getInput("number");
5656
if (explicitNumber) {
5757
const parsed = parseInt(explicitNumber, 10);
58-
if (isNaN(parsed) || parsed <= 0) {
58+
if (isNaN(parsed) || parsed < 0) {
5959
console.log(`Invalid number input: "${explicitNumber}"`);
6060
return null;
6161
}

0 commit comments

Comments
 (0)