-
Notifications
You must be signed in to change notification settings - Fork 0
137 lines (121 loc) · 4.24 KB
/
ci-cd.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
name: CI/CD
on:
push:
tags: [v*]
branches:
- main
pull_request:
# By default, a workflow only runs when a pull_request event's activity type is opened,
# synchronize, or reopened.
types: [opened, synchronize, reopened, edited]
branches:
- main
permissions: read-all
jobs:
check-auto-tagging-will-work:
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
if: |
github.event_name == 'pull_request' &&
(! startsWith(github.ref, 'refs/tags') && ! startsWith(github.ref, 'refs/heads/main'))
uses: climatepolicyradar/reusable-workflows/.github/workflows/check-auto-tagging-will-work.yml@v10
code-quality:
if: |
! cancelled() && always() &&
(needs.check-auto-tagging-will-work.result == 'skipped' || needs.check-auto-tagging-will-work.result == 'success') &&
! startsWith(github.ref, 'refs/tags')
needs:
- check-auto-tagging-will-work
permissions:
# For trunk to post annotations
checks: write
# For repo checkout
contents: read
uses: climatepolicyradar/reusable-workflows/.github/workflows/python-precommit-validator.yml@v16
test:
if: |
! cancelled() && always() &&
(needs.check-auto-tagging-will-work.result == 'skipped' || needs.check-auto-tagging-will-work.result == 'success') &&
! startsWith(github.ref, 'refs/tags')
needs:
- check-auto-tagging-will-work
runs-on: ubuntu-latest
steps:
- name: Install latest Docker Compose
uses: ndeloof/[email protected]
with:
legacy: false
- uses: actions/checkout@v4
- name: Run Unit Tests
run: make test TEST=tests/unit_tests/
env:
POSTGRES_USER: navigator_admin
POSTGRES_PASSWORD: password
POSTGRES_DB: navigator
- name: Run Integration Tests
run: make test TEST=tests/integration_tests
env:
POSTGRES_USER: navigator_admin
POSTGRES_PASSWORD: password
POSTGRES_DB: navigator
build:
if: |
! cancelled() && always() &&
(needs.code-quality.result == 'success' && needs.test.result == 'success') &&
! startsWith(github.ref, 'refs/tags')
runs-on: ubuntu-latest
needs:
- code-quality
- test
steps:
- uses: actions/checkout@v4
- name: Build
run: make build
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: eu-west-1
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
- name: Publish initial image based on branch to ECR
id: retag_and_push_to_ecr
uses: climatepolicyradar/retag-and-push-to-ecr@v1
env:
DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
with:
repo-name: navigator-admin-backend
semver-tag: latest
manual-semver:
if: ${{ ! cancelled() && always() && startsWith(github.ref, 'refs/tags') }}
uses: climatepolicyradar/reusable-workflows/.github/workflows/semver.yml@v3
secrets: inherit
with:
repo-name: navigator-admin-backend
semver-tag: main-${GITHUB_SHA::8}
tag:
if: ${{ ! cancelled() && always() && (needs.build.result == 'success')}}
needs: build
permissions:
contents: write
uses: climatepolicyradar/reusable-workflows/.github/workflows/tag.yml@v3
with:
repo-name: navigator-admin-backend
semver-tag: main-${GITHUB_SHA::8}
secrets:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }}
release:
if: ${{ ! cancelled() && always() && (needs.tag.result == 'success' && needs.tag.outputs.new_tag != 'Skip')}}
needs: tag
permissions:
contents: write
uses: climatepolicyradar/reusable-workflows/.github/workflows/release.yml@v3
with:
new_tag: ${{ needs.tag.outputs.new_tag }}