1+ # CI Workflow
2+ #
3+ # Purpose: Tests all template variants on push to main.
4+ # Generates each variant defined in variants.json and runs lint + tests
5+ # to ensure all feature combinations work correctly.
6+ #
7+ # Trigger: Push to main branch
8+
19name : CI
210
311on :
1624 matrix : ${{ steps.set-matrix.outputs.matrix }}
1725 names : ${{ steps.set-matrix.outputs.names }}
1826 steps :
19- - uses : actions/checkout@v4
27+ - uses : actions/checkout@v6
2028 - id : set-matrix
2129 run : |
2230 echo "matrix=$(jq -c '.variants' variants.json)" >> "${GITHUB_OUTPUT}"
@@ -31,63 +39,21 @@ jobs:
3139 matrix :
3240 include : ${{ fromJSON(needs.load-variants.outputs.matrix) }}
3341 steps :
34- - uses : actions/checkout@v4
35-
36- - uses : actions/setup-python@v5
37- with :
38- python-version : " 3.12"
42+ - uses : actions/checkout@v6
3943
40- - uses : astral-sh/ setup-uv@v4
44+ - uses : ./.github/actions/ setup-environment
4145
42- - name : Install cookiecutter
43- run : pipx install cookiecutter
44-
45- - name : Restore uv cache
46- uses : actions/cache@v4
46+ - uses : ./.github/actions/generate-variant
47+ id : generate
4748 with :
48- path : ~/.cache/uv
49- key : uv-${{ matrix.name }}-${{ hashFiles('variants.json') }}
50- restore-keys : |
51- uv-${{ matrix.name }}-
52-
53- - name : Generate project
54- env :
55- VARIANT_NAME : ${{ matrix.name }}
56- SENTRY : ${{ matrix.sentry }}
57- ASYNC : ${{ matrix.async }}
58- CLI : ${{ matrix.cli }}
59- WEB : ${{ matrix.web }}
60- API : ${{ matrix.api }}
61- API_AUTH : ${{ matrix.api_auth }}
62- API_LAMBDA : ${{ matrix.api_lambda }}
63- API_LAMBDA_TRACING : ${{ matrix.api_lambda_tracing }}
64- API_LAMBDA_METRICS : ${{ matrix.api_lambda_metrics }}
65- API_PAGINATION : ${{ matrix.api_pagination }}
66- API_VERSIONING : ${{ matrix.api_versioning }}
67- run : |
68- ./scripts/generate.bash \
69- --name "test-${VARIANT_NAME}" \
70- --sentry "${SENTRY}" \
71- --async "${ASYNC}" \
72- --cli "${CLI}" \
73- --web "${WEB}" \
74- --api "${API}" \
75- --api-auth "${API_AUTH}" \
76- --api-lambda "${API_LAMBDA}" \
77- --api-lambda-tracing "${API_LAMBDA_TRACING}" \
78- --api-lambda-metrics "${API_LAMBDA_METRICS}" \
79- --api-pagination "${API_PAGINATION}" \
80- --api-versioning "${API_VERSIONING}" \
81- --docker "true"
82-
83- - name : Install dependencies
84- run : ./scripts/install.bash ".test-output/test-${{ matrix.name }}"
49+ variant-name : ${{ matrix.name }}
50+ output-name : test-${{ matrix.name }}
8551
8652 - name : Upload project artifact
8753 uses : actions/upload-artifact@v4
8854 with :
8955 name : project-${{ matrix.name }}
90- path : .test-output/test- ${{ matrix.name }}
56+ path : ${{ steps.generate.outputs.project-path }}
9157 retention-days : 1
9258
9359 lint :
9965 matrix :
10066 variant : ${{ fromJSON(needs.load-variants.outputs.names) }}
10167 steps :
102- - uses : actions/checkout@v4
68+ - uses : actions/checkout@v6
10369
104- - uses : actions/setup-python@v5
105- with :
106- python-version : " 3.12"
107-
108- - uses : astral-sh/setup-uv@v4
70+ - uses : ./.github/actions/setup-environment
10971
11072 - name : Restore uv cache
11173 uses : actions/cache@v4
@@ -136,13 +98,9 @@ jobs:
13698 matrix :
13799 variant : ${{ fromJSON(needs.load-variants.outputs.names) }}
138100 steps :
139- - uses : actions/checkout@v4
140-
141- - uses : actions/setup-python@v5
142- with :
143- python-version : " 3.12"
101+ - uses : actions/checkout@v6
144102
145- - uses : astral-sh/ setup-uv@v4
103+ - uses : ./.github/actions/ setup-environment
146104
147105 - name : Restore uv cache
148106 uses : actions/cache@v4
0 commit comments