forked from almir/docker-webhook
-
Notifications
You must be signed in to change notification settings - Fork 0
148 lines (134 loc) · 6.29 KB
/
CI-Dockerfile_other-branches.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
# The beauty of this CI setup is that it will build any valid DOCKERFILE by setting a few variables.
# See how at https://github.com/firepress-org/rclone-in-docker/blob/master/README-CI.md
# Requires secrets on github: DOCKERHUB_PASSWORD, TOKEN_SLACK
# Update DOCKERFILE_NAME if you are using a special Dockerfile name
# The way we define variables is a hack. See why: https://bit.ly/2ZEAt6u
#
# GNU v3 | Please credit the author if you are re-using some of it :-p
# by Pascal Andy | https://pascalandy.com/blog/now/
name: CI-Dockerfile_other-branches
on:
push:
branches:
- edge*
- dev*
- tmp*
- temp*
- patch*
- pull*
- test*
- pascal*
- bug*
- pr*
jobs:
Job1:
name: Job 1 of 2
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- name: Define variables
run: |
echo "Dockerfile" > DOCKERFILE_NAME
#
# Logically defined
cat $(cat DOCKERFILE_NAME) | grep DOCKERHUB_USER= | head -n 1 | grep -o '".*"' | sed 's/"//g' > DOCKERHUB_USER
cat $(cat DOCKERFILE_NAME) | grep APP_NAME= | head -n 1 | grep -o '".*"' | sed 's/"//g' > APP_NAME
cat $(cat DOCKERFILE_NAME) | grep VERSION= | head -n 1 | grep -o '".*"' | sed 's/"//g' > VERSION
cat $(cat DOCKERFILE_NAME) | grep GITHUB_USER= | head -n 1 | grep -o '".*"' | sed 's/"//g' > GITHUB_USER
cat $(cat DOCKERFILE_NAME) | grep GITHUB_ORG= | head -n 1 | grep -o '".*"' | sed 's/"//g' > GITHUB_ORG
cat $(cat DOCKERFILE_NAME) | grep GITHUB_REGISTRY= | head -n 1 | grep -o '".*"' | sed 's/"//g' > GITHUB_REGISTRY
#
date -d "-4 hours" "+%Y-%m-%d_%HH%Ms%S" > DATE_IT
git rev-parse --short HEAD > SHORT_COMMIT_HASH
echo "$(cat DOCKERHUB_USER)/$(cat APP_NAME)" > DOCKER_USER_APP
echo "$(cat GITHUB_USER)/$(cat APP_NAME)" > GITHUB_USER_APP
#
# Tags are logically defined (EDGE)
echo "$(cat DOCKER_USER_APP):edge" > TAG_EDGE
echo "$(cat DOCKER_USER_APP):edge-$(cat VERSION)" > TAG_EDGE_VERSION
echo "$(cat DOCKER_USER_APP):edge-$(cat VERSION)_$(cat DATE_IT)_$(cat SHORT_COMMIT_HASH)" > TAG_EDGE_VERSION_HASH
- name: Build
run: |
# UAT is User Acceptance Testing
echo "$(cat APP_NAME):uat" > TAG_UAT
docker build --file $(cat DOCKERFILE_NAME) --tag $(cat TAG_UAT) .
#
docker build --file $(cat DOCKERFILE_NAME) --tag $(cat TAG_EDGE) .
docker build --file $(cat DOCKERFILE_NAME) --tag $(cat TAG_EDGE_VERSION) .
docker build --file $(cat DOCKERFILE_NAME) --tag $(cat TAG_EDGE_VERSION_HASH) .
#
# build for Github Package Registry (GPR)
- name: Test image with docker-library
run: |
git clone --depth 1 https://github.com/docker-library/official-images.git official-images
official-images/test/run.sh $(cat TAG_UAT)
- name: Logs / All tags & variables
run: |
echo "Check out https://hub.docker.com/r/$(cat DOCKERHUB_USER)/$(cat APP_NAME)/tags"
echo " "
echo "$(cat TAG_EDGE_VERSION_HASH) < TAG_EDGE_VERSION_HASH"
echo "$(cat TAG_EDGE_VERSION) < TAG_EDGE_VERSION"
echo "$(cat TAG_EDGE) < TAG_EDGE"
echo " "
echo "$(cat APP_NAME) < APP_NAME"
echo "$(cat VERSION) < VERSION"
echo "$(cat DOCKERFILE_NAME) < DOCKERFILE_NAME"
echo " "
echo "$(cat DATE_IT) < DATE_IT"
echo "$(cat SHORT_COMMIT_HASH) < SHORT_COMMIT_HASH"
echo "$(cat DOCKERHUB_USER) < DOCKERHUB_USER"
echo "$(cat GITHUB_USER) < GITHUB_USER"
echo "$(cat GITHUB_ORG) < GITHUB_ORG"
echo "$(cat DOCKER_USER_APP) < DOCKER_USER_APP"
echo "$(cat GITHUB_USER_APP) < GITHUB_USER_APP"
echo "$(cat GITHUB_REGISTRY) < GITHUB_REGISTRY"
- name: Logs / docker (inspect, history, version, info), uname
run: |
docker inspect $(cat TAG_UAT)
docker history $(cat TAG_UAT) --no-trunc
docker version
docker info
uname -a
- name: Publish
run: |
echo ${{ secrets.DOCKERHUB_PASSWORD }} | docker login --username $(cat DOCKERHUB_USER) --password-stdin
docker push $(cat TAG_EDGE)
docker push $(cat TAG_EDGE_VERSION)
docker push $(cat TAG_EDGE_VERSION_HASH)
#
# push on Github Package Registry (GPR)
# echo "ToDo/ docker build -t docker.pkg.github.com/$(cat GITHUB_ORG)/$(cat GITHUB_REGISTRY)/$(cat TAG_BEST_PRACTICE)"
# echo "ToDo/ docker login docker.pkg.github.com -u $(cat GITHUB_USER) -p ${{ secrets.GPR_PASS }}"
# echo "ToDo/ docker push docker.pkg.github.com/$(cat GITHUB_ORG)/$(cat GITHUB_REGISTRY)/$(cat TAG_BEST_PRACTICE)"
Job2:
needs: job1
name: Job 2 of 2
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- name: Define variables
run: |
echo "Dockerfile" > DOCKERFILE_NAME
cat $(cat DOCKERFILE_NAME) | grep DOCKERHUB_USER= | head -n 1 | grep -o '".*"' | sed 's/"//g' > DOCKERHUB_USER
cat $(cat DOCKERFILE_NAME) | grep APP_NAME= | head -n 1 | grep -o '".*"' | sed 's/"//g' > APP_NAME
cat $(cat DOCKERFILE_NAME) | grep VERSION= | head -n 1 | grep -o '".*"' | sed 's/"//g' > VERSION
git rev-parse --short HEAD > SHORT_COMMIT_HASH
echo "$(cat APP_NAME):edge-$(cat VERSION) / $(cat SHORT_COMMIT_HASH)" > NOTI_MESSAGE
- name: Push README to dockerhub description
run: echo "Bypassed as it's not in the master branch."
- name: Notify on Slack
run: |
docker run --rm \
--name noti \
-e NOTI_MESSAGE="$(cat NOTI_MESSAGE)" \
-e SLACK_CHANNEL="github-actions" \
-e SLACK_TOKEN_CRON="${{ secrets.TOKEN_SLACK }}" \
devmtl/noti:stable sh -c \
' NOTI_SLACK_TOKEN="$SLACK_TOKEN_CRON" \
NOTI_SLACK_CHANNEL="$SLACK_CHANNEL" \
noti -k -m "$NOTI_MESSAGE" '
- name: Test image with Aquasec microscanner
run: echo "Bypassed as it's not in the master branch."
- name: Github Actions ideas to implements
run: |
echo "see —> https://gist.github.com/pascalandy/4e499b7c42023836a7d207277923fc09"