-
Notifications
You must be signed in to change notification settings - Fork 218
206 lines (181 loc) · 8.65 KB
/
github-docker-registry-push.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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# This workflow is used for building and pushing Docker images to GitHub Packages.
# It is triggered on push, pull request events and also runs on a schedule (at 4:30 and 16:30).
# It uses the GitHub Container Registry (GHCR) for storing the Docker images.
name: docker image building and pushing to GitHub Packages
on:
push:
branches:
- '*' # Triggered on push to any branch
pull_request:
branches: [ '*' ] # Triggered on pull request to any branch
schedule:
- cron: '30 4,16 * * *' # Runs on a schedule at 4:30 and 16:30
env:
GHCR_USERNAME: ${{ github.repository_owner }} # The owner of the repository
GHCR_TOKEN: ${{ secrets.GHCR_TOKEN }} # The token for GHCR
jobs:
docker:
runs-on: ubuntu-latest # The type of machine to run the job on
steps:
- name: Check if PR is from a fork
# This step checks if the pull request is from a fork
run: echo "IS_FORK=$(if [ '${{ github.event.pull_request.head.repo.full_name }}' != '${{ github.repository }}' ]; then echo 'true'; else echo 'false'; fi)" >> $GITHUB_ENV
- name: Checkout
# This step checks out the repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Retrieve modified files
# This step retrieves the files that were modified in the commit
id: changes
run: echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | tr '\n' ' ')" >> $GITHUB_ENV
- name: Write Docker versions to file
# This step writes the Docker and Docker Compose versions to a file
run: |
echo "- $(docker --version)" > docker-versions.txt
echo "- $(docker compose version)" >> docker-versions.txt
- name: Authenticate GH CLI
# This step authenticates the GitHub CLI
run: gh auth login --with-token <<< "${{ secrets.GITHUB_TOKEN }}"
- name: Commit and create PR for Docker versions
if: github.event_name != 'pull_request'
run: |
git config --global user.name 'GitHub Action'
git config --global user.email '[email protected]'
git checkout -b docker-versions-update
git add docker-versions.txt
if git diff-index --quiet HEAD --; then
echo "No changes to commit"
else
git commit -m "Update Docker versions"
git push origin docker-versions-update
echo 'y' | gh pr create --fill
fi
- name: Check for Dockerfile and context changes
# This step checks for changes in Dockerfile and context
run: |
for file in ${{ env.files }}; do
if [[ $file =~ (^|/)Dockerfile($|/)|(^|/)dockerfiles/ ]]; then
echo "Dockerfile or dockerfiles directory has changed."
echo "Changed file: $file"
break
fi
done
if (( $? == 0 )); then
echo "No Dockerfile or context directory changes. Skipping Docker image build and push steps."
echo "Changed files: ${{ env.files }}"
fi
- name: Set up QEMU
# This step sets up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
# This step sets up Docker Buildx
uses: docker/setup-buildx-action@v3
-
name: Login to GitHub Container Registry
# This step logs in to GHCR
if: contains(env.files, 'Dockerfile')
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ env.GHCR_USERNAME }}
password: ${{ env.GHCR_TOKEN }}
- name: Extract branch name
# This step extracts the branch name
shell: bash
run: |
BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/} | sed -e 's#/#-#g')
if [[ "$BRANCH_NAME" == "main" ]]; then BRANCH_NAME=""; fi
echo "BRANCH=$BRANCH_NAME" >> $GITHUB_ENV
id: extract_branch
- name: Extract branch name and set BRANCH environment variable
# This step extracts the branch name and sets the BRANCH environment variable
shell: bash
run: |
BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/} | sed -e 's#/#-#g')
if [[ "$BRANCH_NAME" == "main" ]]; then BRANCH_NAME=""; fi
echo "BRANCH=$BRANCH_NAME" >> $GITHUB_ENV
- name: Set repository name to lowercase
# This step sets the repository name to lowercase
run: echo "REPO_NAME=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
- name: Build and push a simple jenkins controller
# This step builds and pushes a simple Jenkins controller
if: contains(env.files, 'dockerfiles/Dockerfile') || contains(env.files, 'dockerfiles/')
uses: docker/build-push-action@v6
with:
context: ./dockerfiles
platforms: linux/amd64, linux/aarch64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:simple_controller_${{ env.BRANCH }}
- name: Build and push the jenkins agent for maven tutorial
# This step builds and pushes the Jenkins agent for the Maven tutorial
if: contains(env.files, 'dockerfiles/maven/Dockerfile')
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/maven
platforms: linux/amd64, linux/aarch64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:maven_agent_${{ env.BRANCH }}
- name: Build and push the jenkins agent for python tutorial
# This step builds and pushes the Jenkins agent for the Python tutorial
if: contains(env.files, 'dockerfiles/python/Dockerfile')
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/python
platforms: linux/amd64, linux/aarch64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:python_agent_${{ env.BRANCH }}
- name: Build and push the jenkins agent for node tutorial
# This step builds and pushes the Jenkins agent for the Node.js tutorial
if: contains(env.files, 'dockerfiles/node/Dockerfile')
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/node
platforms: linux/amd64, linux/aarch64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:node_agent_${{ env.BRANCH }}
- name: Build and push the jenkins agent for the sidekick container
# This step builds and pushes the Jenkins agent for the sidekick container
if: contains(env.files, 'dockerfiles/sidekick/Dockerfile')
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/sidekick
platforms: linux/amd64, linux/aarch64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:sidekick_${{ env.BRANCH }}
- name: Build and push the jenkins agent for the agent-finding container
# This step builds and pushes the Jenkins agent for the agent-finding container
if: contains(env.files, 'dockerfiles/agent-discovery/Dockerfile')
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/agent-discovery/
platforms: linux/amd64, linux/aarch64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:agent_discovery_${{ env.BRANCH }}
- name: Build and push the jenkins agent for multi-branch controller
# This step builds and pushes the Jenkins agent for the multi-branch controller
if: contains(env.files, 'dockerfiles/multi/Dockerfile')
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/multi
platforms: linux/amd64, linux/aarch64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:multi_controller_${{ env.BRANCH }}
- name: Build and push the jenkins agent for Android
# This step builds and pushes the Jenkins agent for Android
if: contains(env.files, 'dockerfiles/android/Dockerfile')
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/android
platforms: linux/amd64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:android_${{ env.BRANCH }}
- name: Build and push the jenkins agent for golang tutorial
# This step builds and pushes the Jenkins agent for the Golang tutorial
if: contains(env.files, 'dockerfiles/golang/Dockerfile')
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/golang
platforms: linux/amd64, linux/arm64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:golang_${{ env.BRANCH }}