-
Notifications
You must be signed in to change notification settings - Fork 23
145 lines (131 loc) · 4.37 KB
/
build.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
138
139
140
141
142
143
144
145
name: Test, Build, Deploy
on:
push:
branches:
- '*'
paths-ignore:
- '**/*.md'
pull_request:
branches:
- '*'
paths-ignore:
- '**/*.md'
workflow_dispatch:
create:
branches:
- '*'
jobs:
validate-branch-name:
runs-on: ubuntu-latest
outputs:
valid_branch_name: ${{ steps.validate.outputs.valid_branch_name }}
steps:
- name: Validate Branch Name
id: validate
run: |
BRANCH_NAME="${{ github.ref_name }}"
if [[ "$BRANCH_NAME" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "::error::Branch name '$BRANCH_NAME' is not allowed. Branch names using versioning names like 'v1.2.3' are prohibited."
echo "valid_branch_name=false" >> $GITHUB_OUTPUT
exit 1
else
echo "Branch name '$BRANCH_NAME' is valid."
echo "valid_branch_name=true" >> $GITHUB_OUTPUT
fi
unit-tests:
needs: validate-branch-name
if: needs.validate-branch-name.outputs.valid_branch_name == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10.13'
- name: Install testing dependencies
run: |
python -m pip install --upgrade pip
pip install -r docker/requirements.txt
- name: Run unit tests
run: |
python3 -m pytest -o log_cli=false
build:
needs: unit-tests
runs-on: ubuntu-latest
if: github.event_name == 'push'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: '0'
- name: Bump version and push tag
if: ${{ github.ref_name == 'stable' }}
id: setversion
uses: anothrNick/github-tag-action@1.36.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
WITH_V: true
RELEASE_BRANCHES: stable
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Store short Commit ID in env variable
id: vars
run: |
calculatedSha=$(git rev-parse --short ${{ github.sha }})
echo "SHORT_COMMIT_ID=$calculatedSha" >> $GITHUB_ENV
- name: Determine Docker image tag
id: determine_tag
run: |
BRANCH_NAME="${{ github.ref_name }}"
if [[ "$BRANCH_NAME" == "dev" ]]; then
IMAGE_TAG="dev"
elif [[ "$BRANCH_NAME" == "stable" ]]; then
IMAGE_TAG=${{ steps.setversion.outputs.new_tag }}
else
IMAGE_TAG=$BRANCH_NAME
fi
# Convert IMAGE_TAG to lowercase
IMAGE_TAG=$(echo $IMAGE_TAG | tr '[:upper:]' '[:lower:]')
echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV
# Convert repository owner to lowercase
REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')
echo "REPO_OWNER=$REPO_OWNER" >> $GITHUB_ENV
- name: Build, Tag, and Push Docker Image
env:
IMAGE_NAME: ghcr.io/${{ env.REPO_OWNER }}/decluttarr
IMAGE_TAG: ${{ env.IMAGE_TAG }}
run: |
BRANCH_NAME="${{ github.ref_name }}"
TAG_LATEST=""
if [[ "$BRANCH_NAME" == "stable" ]]; then
TAG_LATEST="-t $IMAGE_NAME:latest"
fi
docker buildx build \
--platform linux/amd64,linux/arm64 -f docker/Dockerfile . \
--progress plain \
-t $IMAGE_NAME:$IMAGE_TAG \
$TAG_LATEST \
--label com.decluttarr.version=$IMAGE_TAG \
--label com.decluttarr.commit=$SHORT_COMMIT_ID \
--build-arg IMAGE_TAG=$IMAGE_TAG \
--build-arg SHORT_COMMIT_ID=$SHORT_COMMIT_ID \
--push
docker-image-clean-up:
needs: build
runs-on: ubuntu-latest
steps:
- name: Clean up Docker images
uses: dataaxiom/ghcr-cleanup-action@v1.0.8
with:
exclude-tags: dev
delete-untagged: true
delete-ghost-images: true
delete-partial-images: true
token: ${{ secrets.GITHUB_TOKEN }}