Skip to content

Commit d86c397

Browse files
authored
Merge pull request #4 from WyriHaximus/align-docker-base-github-action-setup
Align Docker base Github Action setup
2 parents 6d3c48f + a8b53ca commit d86c397

File tree

7 files changed

+340
-42
lines changed

7 files changed

+340
-42
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
version: '3.2'
2+
services:
3+
postgres:
4+
container_name: clair_postgres
5+
# This image provides a nightly build with updated vulnerability databases
6+
# once setting up clair from scratch can take up to 30 minutes
7+
image: arminc/clair-db:latest
8+
restart: unless-stopped
9+
environment:
10+
POSTGRES_PASSWORD: password
11+
12+
clair:
13+
container_name: clair_clair
14+
image: arminc/clair-local-scan:v2.0.4
15+
restart: unless-stopped
16+
depends_on:
17+
- postgres
18+
ports:
19+
- "6060-6061:6060-6061"
20+
links:
21+
- postgres

.github/boring-cyborg.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
labelPRBasedOnFilePath:
2-
"Documentation 📚":
3-
- README.md
4-
- CONTRIBUTING.md
52
"Dependencies 📦":
63
- Dockerfile*
74
- composer.*

.github/workflows/ci.yml

Lines changed: 82 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,95 @@ on:
88
- master
99
pull_request:
1010
jobs:
11-
lint:
11+
generate-ref:
12+
name: Generate Ref
1213
runs-on: ubuntu-latest
13-
strategy:
14-
fail-fast: false
14+
outputs:
15+
REF: ${{ steps.generate-ref.outputs.ref }}
1516
steps:
16-
- uses: actions/checkout@v2
17+
- uses: actions/checkout@v1
18+
- id: generate-ref
19+
name: Generate Ref
20+
run: |
21+
if [ "${{ github.event_name }}" == "pull_request" ] ; then
22+
ref=$(php -r "echo str_replace('/', '-SLASH-', '${{ github.event.pull_request.head.ref }}');")
23+
echo "$ref"
24+
printf "::set-output name=ref::%s" $ref
25+
exit 0
26+
fi
27+
echo "${GITHUB_REF##*/}"
28+
echo "::set-output name=ref::${GITHUB_REF##*/}"
29+
lint-dockerfile:
30+
name: Lint Dockerfile
31+
runs-on: ubuntu-latest
32+
steps:
33+
- uses: actions/checkout@v1
1734
- name: Lint Dockerfile
1835
uses: docker://hadolint/hadolint:latest-debian
1936
with:
2037
entrypoint: hadolint
21-
args: Dockerfile
22-
build:
38+
args: Dockerfile-build
39+
fetch-versions:
40+
name: Fetch Versions
41+
needs:
42+
- lint-dockerfile
43+
runs-on: ubuntu-latest
44+
steps:
45+
- uses: actions/checkout@v1
46+
- name: Fetch Versions
47+
uses: ./
48+
id: versions
49+
env:
50+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
51+
with:
52+
milestone: "v1.0.0"
53+
- name: Show Versions
54+
run: echo "${VERSIONS}"
55+
env:
56+
VERSIONS: ${{ steps.versions.outputs.versions }}
57+
build-docker-image:
58+
name: Build Docker image
2359
needs:
24-
- lint
60+
- fetch-versions
61+
- generate-ref
62+
- lint-dockerfile
2563
runs-on: ubuntu-latest
26-
strategy:
27-
fail-fast: false
2864
steps:
29-
- uses: actions/checkout@v2
30-
- run: docker build . -t "${DOCKER_IMAGE}:ci-latest"
65+
- uses: actions/checkout@v1
66+
- run: docker version
67+
- run: docker images
68+
- name: Install clair-scanner
69+
run: |
70+
sudo curl -L https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64 -o /usr/local/bin/clair-scanner
71+
sudo chmod +x /usr/local/bin/clair-scanner
72+
- run: docker images
73+
- run: mkdir -p $(echo "./clair/${DOCKER_IMAGE}:${REF}" | tr '[:upper:]' '[:lower:]')
74+
env:
75+
REF: ${{ needs.generate-ref.outputs.ref }}
76+
- run: docker-compose -f .docker/security/docker-compose.yml -p clair-ci up -d
77+
- run: docker build --no-cache -t "${DOCKER_IMAGE}:${REF}" . -f Dockerfile-build
78+
env:
79+
REF: ${{ needs.generate-ref.outputs.ref }}
80+
- run: docker tag "${DOCKER_IMAGE}:${REF}" "${DOCKER_IMAGE}:sha-${GITHUB_SHA}"
81+
env:
82+
REF: ${{ needs.generate-ref.outputs.ref }}
83+
- run: echo -e "${DOCKER_IMAGE}:${REF}" | xargs -I % sh -c 'clair-scanner --ip 172.17.0.1 -r "./clair/%.json" -l ./clair/clair.log % || (echo "% is vulnerable" && exit 1)'
84+
env:
85+
REF: ${{ needs.generate-ref.outputs.ref }}
86+
- run: docker-compose -f .docker/security/docker-compose.yml -p clair-ci down
3187
- run: docker images
88+
- name: Login to Docker Hub
89+
if: contains(github.ref, 'dependabot') == false
90+
run: |
91+
echo "${{ secrets.HUB_PASSCODE }}" | \
92+
docker login \
93+
--username "${{ secrets.HUB_USERNAME }}" \
94+
--password-stdin
95+
- name: Push branch image to Docker Hub
96+
if: contains(github.ref, 'dependabot') == false
97+
run: docker push "${DOCKER_IMAGE}:${REF}"
98+
env:
99+
REF: ${{ needs.generate-ref.outputs.ref }}
100+
- name: Push commit sha image to Docker Hub
101+
if: contains(github.ref, 'dependabot') == false
102+
run: docker push "${DOCKER_IMAGE}:sha-${GITHUB_SHA}"
Lines changed: 122 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,59 @@
1-
name: Create Release & And push Docker image
2-
1+
name: Create Release
32
env:
43
DOCKER_IMAGE: wyrihaximusgithubactions/supported-php-versions
5-
DOCKER_BUILDKIT: 1
64
MILESTONE: ${{ github.event.milestone.title }}
75
on:
86
milestone:
97
types:
108
- closed
119
jobs:
10+
wait-for-status-checks:
11+
name: Wait for status checks
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v1
15+
- run: sleep 13
16+
- name: 'Wait for status checks'
17+
id: waitforstatuschecks
18+
uses: "WyriHaximus/github-action-wait-for-status@master"
19+
with:
20+
ignoreActions: "Wait for status checks"
21+
checkInterval: 5
22+
env:
23+
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
24+
- id: generate-version-strategy
25+
if: steps.waitforstatuschecks.outputs.status != 'success'
26+
name: Fail
27+
run: exit 1
28+
generate-version-strategy:
29+
name: Generate Version Strategy
30+
needs:
31+
- wait-for-status-checks
32+
runs-on: ubuntu-latest
33+
outputs:
34+
docker_versions: ${{ steps.generate-version-strategy.outputs.docker_versions }}
35+
tag_versions: ${{ steps.generate-version-strategy.outputs.tag_versions }}
36+
steps:
37+
- uses: actions/checkout@v1
38+
- uses: WyriHaximus/github-action-break-up-semver@master
39+
id: breakupsemver
40+
with:
41+
version: ${{ env.MILESTONE }}
42+
- id: generate-version-strategy
43+
name: Generate Versions
44+
env:
45+
MAJOR: ${{ steps.breakupsemver.outputs.v_major }}
46+
MAJOR_MINOR: ${{ steps.breakupsemver.outputs.v_major_minor }}
47+
MAJOR_MINOR_PATCH: ${{ steps.breakupsemver.outputs.v_major_minor_patch }}
48+
run: |
49+
echo "::set-output name=docker_versions::[\"${MAJOR}\",\"${MAJOR_MINOR}\",\"${MAJOR_MINOR_PATCH}\"]"
50+
git tag > tag.list
51+
cat tag.list
52+
printf "::set-output name=tag_versions::%s" $(jq --raw-input --slurp 'split("\n")' tag.list -c | php -r "echo json_encode(array_values(array_diff_assoc(json_decode('[\"${MAJOR}\",\"${MAJOR_MINOR}\",\"${MAJOR_MINOR_PATCH}\"]'), json_decode(stream_get_contents(STDIN)))));")
1253
generate-changelog:
1354
name: Generate Changelog
55+
needs:
56+
- generate-version-strategy
1457
runs-on: ubuntu-latest
1558
outputs:
1659
changelog: ${{ steps.changelog.outputs.changelog }}
@@ -26,19 +69,56 @@ jobs:
2669
run: echo "${CHANGELOG}"
2770
env:
2871
CHANGELOG: ${{ steps.changelog.outputs.changelog }}
72+
tag-docker-image:
73+
name: Tag Docker image for version ${{ matrix.version }}
74+
needs:
75+
- generate-version-strategy
76+
strategy:
77+
matrix:
78+
version: ${{ fromJson(needs.generate-version-strategy.outputs.docker_versions) }}
79+
runs-on: ubuntu-latest
80+
steps:
81+
- name: Login to Docker Hub
82+
env:
83+
DOCKER_USER: ${{ secrets.HUB_USERNAME }}
84+
DOCKER_PASSWORD: ${{ secrets.HUB_PASSCODE }}
85+
run: |
86+
echo "${{ secrets.DOCKER_PASSWORD }}" | \
87+
docker login \
88+
--username "${{ secrets.DOCKER_USER }}" \
89+
--password-stdin
90+
- name: Pull source image
91+
run: docker pull "${DOCKER_IMAGE}:sha-${GITHUB_SHA}"
92+
- name: Retag images for release
93+
run: docker tag "${DOCKER_IMAGE}:sha-${GITHUB_SHA}" "${DOCKER_IMAGE}:${{ matrix.version }}"
94+
- run: docker images
95+
- name: Push release images to Docker Hub
96+
run: docker push "${DOCKER_IMAGE}:${{ matrix.version }}"
2997
create-release:
3098
name: Create Release
3199
needs:
100+
- generate-version-strategy
101+
- tag-docker-image
32102
- generate-changelog
103+
strategy:
104+
matrix:
105+
version: ${{ fromJson(needs.generate-version-strategy.outputs.tag_versions) }}
33106
runs-on: ubuntu-latest
34107
steps:
35-
- uses: actions/checkout@v2
108+
- uses: actions/checkout@v1
109+
- name: Create release/${{ matrix.version }} branch
110+
run: git checkout -b release/${{ matrix.version }} ${GITHUB_SHA}
111+
- run: sed -i 's/master/${{ matrix.version }}/g' Dockerfile
112+
- run: cat Dockerfile
113+
- run: git add Dockerfile
114+
- run: git status
115+
- run: echo -e "${CHANGELOG}" > release-${{ matrix.version }}-changelog.md
36116
env:
37117
CHANGELOG: ${{ needs.generate-changelog.outputs.changelog }}
38118
- run: |
39-
echo -e "${MILESTONE_DESCRIPTION}\r\n\r\n${CHANGELOG}" > release-${{ env.MILESTONE }}-release-message.md
40-
cat release-${{ env.MILESTONE }}-release-message.md
41-
release_message=$(cat release-${{ env.MILESTONE }}-release-message.md)
119+
echo -e "${MILESTONE_DESCRIPTION}\r\n\r\n${CHANGELOG}" > release-${{ matrix.version }}-release-message.md
120+
cat release-${{ matrix.version }}-release-message.md
121+
release_message=$(cat release-${{ matrix.version }}-release-message.md)
42122
release_message="${release_message//'%'/'%25'}"
43123
release_message="${release_message//$'\n'/'%0A'}"
44124
release_message="${release_message//$'\r'/'%0D'}"
@@ -47,26 +127,45 @@ jobs:
47127
env:
48128
MILESTONE_DESCRIPTION: ${{ github.event.milestone.description }}
49129
CHANGELOG: ${{ needs.generate-changelog.outputs.changelog }}
50-
- name: Create Release with Changelog
130+
- run: cat release-${{ matrix.version }}-changelog.md
131+
- name: Set git commit user
132+
run: |
133+
git config user.name '${{ github.actor }}'
134+
git config user.email '${{ github.actor }}@users.noreply.github.com'
135+
- run: git commit -F release-${{ matrix.version }}-changelog.md
136+
- run: git tag -F release-${{ matrix.version }}-changelog.md ${{ matrix.version }}
137+
- name: Push changes
138+
uses: ad-m/[email protected]
139+
with:
140+
tags: true
141+
branch: release/${{ matrix.version }}
142+
github_token: ${{ secrets.GITHUB_TOKEN }}
143+
- name: Create Reference Release with Changelog
144+
if: ${{ matrix.version == env.MILESTONE }}
51145
uses: fleskesvor/create-release@feature/support-target-commitish
52146
env:
53147
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
54148
with:
55-
tag_name: ${{ env.MILESTONE }}
56-
release_name: ${{ env.MILESTONE }}
149+
tag_name: ${{ matrix.version }}
150+
release_name: ${{ matrix.version }}
57151
body: ${{ steps.releasemessage.outputs.release_message }}
58152
draft: false
59153
prerelease: false
60-
tag:
61-
runs-on: 'ubuntu-latest'
62-
steps:
63-
- uses: actions/checkout@v2
64-
- run: docker build . -t "${DOCKER_IMAGE}:${{ env.MILESTONE }}"
65-
- name: Login to Docker Hub
66-
run: |
67-
echo "${{ secrets.HUB_PASSCODE }}" | \
68-
docker login \
69-
--username "${{ secrets.HUB_USERNAME }}" \
70-
--password-stdin
71-
- name: Push release
72-
run: docker push "${DOCKER_IMAGE}:${{ env.MILESTONE }}"
154+
commitish: release/${{ matrix.version }}
155+
- name: Create Release with Changelog
156+
if: ${{ matrix.version != env.MILESTONE }}
157+
uses: fleskesvor/create-release@feature/support-target-commitish
158+
env:
159+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
160+
with:
161+
tag_name: ${{ matrix.version }}
162+
release_name: ${{ matrix.version }}
163+
body: Reference tag to ${{ env.MILESTONE }}
164+
draft: false
165+
prerelease: false
166+
commitish: release/${{ matrix.version }}
167+
- name: Delete release/${{ matrix.version }} branch
168+
uses: dawidd6/action-delete-branch@v3
169+
with:
170+
github_token: ${{github.token}}
171+
branches: release/${{ matrix.version }}

0 commit comments

Comments
 (0)