-
Notifications
You must be signed in to change notification settings - Fork 0
144 lines (136 loc) · 4.71 KB
/
CD_deployment.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
name: Deployment CD
env:
DOCKERREPO: seblum/octivbooker
on:
workflow_dispatch:
push:
paths:
- 'pyproject.toml' # This will trigger the workflow only if pyproject.toml is changed
jobs:
get-tag:
name: Get Tag
runs-on: ubuntu-latest
outputs:
PACKAGE_VERSION: ${{ steps.extract_version.outputs.PACKAGE_VERSION }}
versions_changed: ${{ steps.compare_versions.outputs.versions_changed }}
steps:
-
name: Checkout code
uses: actions/checkout@v4
-
name: Extract version from pyproject.toml
id: extract_version
run: |
VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' ./pyproject.toml)
echo "PACKAGE_VERSION=$VERSION" >> $GITHUB_OUTPUT
-
name: Get previous version
id: get_previous_version
run: |
PREVIOUS_VERSION=$(git show HEAD~1:pyproject.toml | sed -n 's/^version = "\(.*\)"/\1/p')
echo "PREVIOUS_VERSION=$PREVIOUS_VERSION" >> $GITHUB_OUTPUT
-
name: Compare versions
id: compare_versions
run: |
if [ "${{ steps.extract_version.outputs.PACKAGE_VERSION }}" = "${{ steps.get_previous_version.outputs.PREVIOUS_VERSION }}" ]; then
echo "Version has not changed. Exiting."
echo "versions_changed=false" >> $GITHUB_OUTPUT
exit 0
else
echo "Version has changed. Proceeding."
echo "versions_changed=true" >> $GITHUB_OUTPUT
fi
deploy:
name: "📦 Build & Push : ${{ matrix.tags }}"
runs-on: ubuntu-latest
strategy:
matrix:
tags: ["latest","v${{ needs.get-tag.outputs.PACKAGE_VERSION }}"]
needs: get-tag
if: ${{ needs.get-tag.outputs.versions_changed }}
steps:
-
name: Checkout code
uses: actions/checkout@v4
-
name: Set up QEMU
uses: docker/setup-qemu-action@v3
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
-
name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v6
with:
file: ./poetry.Dockerfile
push: true
tags: ${{ env.DOCKERREPO }}:${{ matrix.tags }}
run-on-schedule-version-bump:
name: 🗃️ Create Version Bump PR
runs-on: ubuntu-latest
permissions:
contents: write
issues: write
pull-requests: write
actions: write
needs:
- deploy
- get-tag
env:
TAG_VERSION: ${{ needs.get-tag.outputs.PACKAGE_VERSION }}
steps:
-
name: Checkout code with full history
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.WORKFLOW_TOKEN }}
-
name: Create new Branch
run: |
git fetch origin
git checkout -b update-run-on-schedule-version-${{ env.TAG_VERSION }} origin/master
git pull --rebase
git push origin update-run-on-schedule-version-${{ env.TAG_VERSION }} --force
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
name: Update Version in pyproject.toml
run: |
sed -i "s/^ DOCKER_IMAGE: \"octivbooker:.*\"/ DOCKER_IMAGE: \"octivbooker:v${{ env.TAG_VERSION }}\"/" .github/workflows/run-on-schedule.yml
-
name: Verify Update
run: cat .github/workflows/run-on-schedule.yml
-
name: Commit changes
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git add .github/workflows/run-on-schedule.yml
git commit -m "Update DOCKER_IMAGE: to ${{ env.TAG_VERSION }}"
git push origin update-run-on-schedule-version-${{ env.TAG_VERSION }}
-
name: Install GitHub CLI
run: |
sudo apt-get install gh
-
name: Create Pull Request
run: |
PR_EXISTS=$(gh pr list --head update-run-on-schedule-version-${{ env.TAG_VERSION }} --json number --jq '.[0].number' || echo "")
if [ -z "$PR_EXISTS" ]; then
gh pr create --title "Bump run-on-schedule.yml version to ${{ env.TAG_VERSION }}" \
--body "This PR updates the version in run-on-schedule.yml to ${{ env.TAG_VERSION }}." \
--base master \
--head update-run-on-schedule-version-${{ env.TAG_VERSION }}
else
echo "PR already exists."
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}