Skip to content

Commit f7dc8c1

Browse files
authored
Merge pull request #1 from NHSDigital/django-spike
Set up a Django project with some CI
2 parents 0fd7e7a + 1c5fb2b commit f7dc8c1

File tree

299 files changed

+17055
-4406
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

299 files changed

+17055
-4406
lines changed

.dockerignore

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Python
2+
**/__pycache__
3+
4+
# Django
5+
**/.env
6+
**/*.sqlite3
7+
**/staticfiles/

.github/actions/check-english-usage/action.yaml

-10
This file was deleted.

.github/actions/check-file-format/action.yaml

-10
This file was deleted.

.github/actions/check-markdown-format/action.yaml

-10
This file was deleted.

.github/actions/create-lines-of-code-report/action.yaml

-57
This file was deleted.

.github/actions/lint-terraform/action.yaml

-20
This file was deleted.

.github/workflows/cicd-1-pull-request.yaml

+8-43
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
11
name: "CI/CD pull request"
22

3-
# The total recommended execution time for the "CI/CD Pull Request" workflow is around 20 minutes.
4-
53
on:
6-
push:
7-
branches:
8-
- "**"
94
pull_request:
10-
types: [opened, reopened]
5+
types: [opened, reopened, synchronize]
116

127
jobs:
138
metadata:
@@ -23,50 +18,22 @@ jobs:
2318
python_version: ${{ steps.variables.outputs.python_version }}
2419
terraform_version: ${{ steps.variables.outputs.terraform_version }}
2520
version: ${{ steps.variables.outputs.version }}
26-
does_pull_request_exist: ${{ steps.pr_exists.outputs.does_pull_request_exist }}
2721
steps:
2822
- name: "Checkout code"
2923
uses: actions/checkout@v4
3024
- name: "Set CI/CD variables"
3125
id: variables
3226
run: |
3327
datetime=$(date -u +'%Y-%m-%dT%H:%M:%S%z')
34-
BUILD_DATETIME=$datetime make version-create-effective-file
3528
echo "build_datetime_london=$(TZ=Europe/London date --date=$datetime +'%Y-%m-%dT%H:%M:%S%z')" >> $GITHUB_OUTPUT
3629
echo "build_datetime=$datetime" >> $GITHUB_OUTPUT
3730
echo "build_timestamp=$(date --date=$datetime -u +'%Y%m%d%H%M%S')" >> $GITHUB_OUTPUT
3831
echo "build_epoch=$(date --date=$datetime -u +'%s')" >> $GITHUB_OUTPUT
3932
echo "nodejs_version=$(grep "^nodejs" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
40-
echo "python_version=$(grep "^nodejs" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
33+
echo "python_version=$(grep "^python" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
4134
echo "terraform_version=$(grep "^terraform" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
42-
echo "version=$(head -n 1 .version 2> /dev/null || echo unknown)" >> $GITHUB_OUTPUT
43-
- name: "Check if pull request exists for this branch"
44-
id: pr_exists
45-
env:
46-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
47-
run: |
48-
branch_name=${GITHUB_HEAD_REF:-$(echo $GITHUB_REF | sed 's#refs/heads/##')}
49-
echo "Current branch is '$branch_name'"
50-
if gh pr list --head $branch_name | grep -q .; then
51-
echo "Pull request exists"
52-
echo "does_pull_request_exist=true" >> $GITHUB_OUTPUT
53-
else
54-
echo "Pull request doesn't exist"
55-
echo "does_pull_request_exist=false" >> $GITHUB_OUTPUT
56-
fi
57-
- name: "List variables"
58-
run: |
59-
export BUILD_DATETIME_LONDON="${{ steps.variables.outputs.build_datetime_london }}"
60-
export BUILD_DATETIME="${{ steps.variables.outputs.build_datetime }}"
61-
export BUILD_TIMESTAMP="${{ steps.variables.outputs.build_timestamp }}"
62-
export BUILD_EPOCH="${{ steps.variables.outputs.build_epoch }}"
63-
export NODEJS_VERSION="${{ steps.variables.outputs.nodejs_version }}"
64-
export PYTHON_VERSION="${{ steps.variables.outputs.python_version }}"
65-
export TERRAFORM_VERSION="${{ steps.variables.outputs.terraform_version }}"
66-
export VERSION="${{ steps.variables.outputs.version }}"
67-
export DOES_PULL_REQUEST_EXIST="${{ steps.pr_exists.outputs.does_pull_request_exist }}"
68-
make list-variables
69-
commit-stage: # Recommended maximum execution time is 2 minutes
35+
echo "version=${GITHUB_REF}" >> $GITHUB_OUTPUT
36+
commit-stage:
7037
name: "Commit stage"
7138
needs: [metadata]
7239
uses: ./.github/workflows/stage-1-commit.yaml
@@ -79,9 +46,9 @@ jobs:
7946
terraform_version: "${{ needs.metadata.outputs.terraform_version }}"
8047
version: "${{ needs.metadata.outputs.version }}"
8148
secrets: inherit
82-
test-stage: # Recommended maximum execution time is 5 minutes
49+
test-stage:
8350
name: "Test stage"
84-
needs: [metadata, commit-stage]
51+
needs: [metadata]
8552
uses: ./.github/workflows/stage-2-test.yaml
8653
with:
8754
build_datetime: "${{ needs.metadata.outputs.build_datetime }}"
@@ -92,11 +59,10 @@ jobs:
9259
terraform_version: "${{ needs.metadata.outputs.terraform_version }}"
9360
version: "${{ needs.metadata.outputs.version }}"
9461
secrets: inherit
95-
build-stage: # Recommended maximum execution time is 3 minutes
62+
build-stage:
9663
name: "Build stage"
9764
needs: [metadata, test-stage]
9865
uses: ./.github/workflows/stage-3-build.yaml
99-
if: needs.metadata.outputs.does_pull_request_exist == 'true' || (github.event_name == 'pull_request' && (github.event.action == 'opened' || github.event.action == 'reopened'))
10066
with:
10167
build_datetime: "${{ needs.metadata.outputs.build_datetime }}"
10268
build_timestamp: "${{ needs.metadata.outputs.build_timestamp }}"
@@ -106,11 +72,10 @@ jobs:
10672
terraform_version: "${{ needs.metadata.outputs.terraform_version }}"
10773
version: "${{ needs.metadata.outputs.version }}"
10874
secrets: inherit
109-
acceptance-stage: # Recommended maximum execution time is 10 minutes
75+
acceptance-stage:
11076
name: "Acceptance stage"
11177
needs: [metadata, build-stage]
11278
uses: ./.github/workflows/stage-4-acceptance.yaml
113-
if: needs.metadata.outputs.does_pull_request_exist == 'true' || (github.event_name == 'pull_request' && (github.event.action == 'opened' || github.event.action == 'reopened'))
11479
with:
11580
build_datetime: "${{ needs.metadata.outputs.build_datetime }}"
11681
build_timestamp: "${{ needs.metadata.outputs.build_timestamp }}"
+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
name: "CI/CD main branch"
2+
3+
on:
4+
push:
5+
branches: [main]
6+
7+
jobs:
8+
metadata:
9+
name: "Set CI/CD metadata"
10+
runs-on: ubuntu-latest
11+
timeout-minutes: 1
12+
outputs:
13+
build_datetime: ${{ steps.variables.outputs.build_datetime }}
14+
build_timestamp: ${{ steps.variables.outputs.build_timestamp }}
15+
build_epoch: ${{ steps.variables.outputs.build_epoch }}
16+
nodejs_version: ${{ steps.variables.outputs.nodejs_version }}
17+
python_version: ${{ steps.variables.outputs.python_version }}
18+
terraform_version: ${{ steps.variables.outputs.terraform_version }}
19+
version: ${{ steps.variables.outputs.version }}
20+
tag: ${{ steps.variables.outputs.tag }}
21+
steps:
22+
- name: "Checkout code"
23+
uses: actions/checkout@v4
24+
- name: "Set CI/CD variables"
25+
id: variables
26+
run: |
27+
datetime=$(date -u +'%Y-%m-%dT%H:%M:%S%z')
28+
echo "build_datetime=$datetime" >> $GITHUB_OUTPUT
29+
echo "build_timestamp=$(date --date=$datetime -u +'%Y%m%d%H%M%S')" >> $GITHUB_OUTPUT
30+
echo "build_epoch=$(date --date=$datetime -u +'%s')" >> $GITHUB_OUTPUT
31+
echo "nodejs_version=$(grep "^nodejs" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
32+
echo "python_version=$(grep "^python" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
33+
echo "terraform_version=$(grep "^terraform" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
34+
echo "version=${GITHUB_REF}"
35+
36+
# Scan the commit
37+
commit-stage:
38+
name: "Commit stage"
39+
needs: [metadata]
40+
uses: ./.github/workflows/stage-1-commit.yaml
41+
with:
42+
build_datetime: "${{ needs.metadata.outputs.build_datetime }}"
43+
build_timestamp: "${{ needs.metadata.outputs.build_timestamp }}"
44+
build_epoch: "${{ needs.metadata.outputs.build_epoch }}"
45+
nodejs_version: "${{ needs.metadata.outputs.nodejs_version }}"
46+
python_version: "${{ needs.metadata.outputs.python_version }}"
47+
terraform_version: "${{ needs.metadata.outputs.terraform_version }}"
48+
version: "${{ needs.metadata.outputs.version }}"
49+
secrets: inherit
50+
51+
# Test the integrated code
52+
test-stage:
53+
name: "Test stage"
54+
needs: [metadata]
55+
uses: ./.github/workflows/stage-2-test.yaml
56+
with:
57+
build_datetime: "${{ needs.metadata.outputs.build_datetime }}"
58+
build_timestamp: "${{ needs.metadata.outputs.build_timestamp }}"
59+
build_epoch: "${{ needs.metadata.outputs.build_epoch }}"
60+
nodejs_version: "${{ needs.metadata.outputs.nodejs_version }}"
61+
python_version: "${{ needs.metadata.outputs.python_version }}"
62+
terraform_version: "${{ needs.metadata.outputs.terraform_version }}"
63+
version: "${{ needs.metadata.outputs.version }}"
64+
secrets: inherit
65+
66+
# Build the final artefact with the integrated code
67+
build-stage: # Recommended maximum execution time is 3 minutes
68+
name: "Build stage"
69+
needs: [metadata, commit-stage, test-stage]
70+
uses: ./.github/workflows/stage-3-build.yaml
71+
with:
72+
build_datetime: "${{ needs.metadata.outputs.build_datetime }}"
73+
build_timestamp: "${{ needs.metadata.outputs.build_timestamp }}"
74+
build_epoch: "${{ needs.metadata.outputs.build_epoch }}"
75+
nodejs_version: "${{ needs.metadata.outputs.nodejs_version }}"
76+
python_version: "${{ needs.metadata.outputs.python_version }}"
77+
terraform_version: "${{ needs.metadata.outputs.terraform_version }}"
78+
version: "${{ needs.metadata.outputs.version }}"
79+
secrets: inherit
80+
81+
acceptance-stage:
82+
name: "Acceptance stage"
83+
needs: [metadata, build-stage]
84+
uses: ./.github/workflows/stage-4-acceptance.yaml
85+
with:
86+
build_datetime: "${{ needs.metadata.outputs.build_datetime }}"
87+
build_timestamp: "${{ needs.metadata.outputs.build_timestamp }}"
88+
build_epoch: "${{ needs.metadata.outputs.build_epoch }}"
89+
nodejs_version: "${{ needs.metadata.outputs.nodejs_version }}"
90+
python_version: "${{ needs.metadata.outputs.python_version }}"
91+
terraform_version: "${{ needs.metadata.outputs.terraform_version }}"
92+
version: "${{ needs.metadata.outputs.version }}"
93+
secrets: inherit
94+
95+
# TODO: deploy the thing. This most likely will be done using Azure pipelines.

0 commit comments

Comments
 (0)