@@ -3,10 +3,37 @@ name: Test
33on :
44 pull_request :
55 branches : [main]
6+ push :
7+ branches : [main]
68
79jobs :
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
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 }}"
0 commit comments