Skip to content

Commit 4321246

Browse files
authored
Merge pull request #289 from membermatters/feature/gha-external-pr-builds
Feature/gha external pr builds
2 parents 0cc97f6 + b23ea94 commit 4321246

File tree

2 files changed

+101
-27
lines changed

2 files changed

+101
-27
lines changed

.github/workflows/build_docker.pr.yml

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,40 +13,28 @@ jobs:
1313
outputs:
1414
branch: ${{ steps.extract_branch.outputs.branch }}
1515
steps:
16-
- name: Set up QEMU
17-
uses: docker/setup-qemu-action@v1
1816
- name: Set up Docker Buildx
19-
uses: docker/setup-buildx-action@v1
20-
- name: Login to DockerHub
21-
uses: docker/login-action@v1
22-
with:
23-
username: ${{ secrets.DOCKERHUB_USERNAME }}
24-
password: ${{ secrets.DOCKERHUB_TOKEN }}
17+
uses: docker/setup-buildx-action@v3
2518
- name: Extract branch name
2619
shell: bash
2720
run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" | tr / - >> $GITHUB_OUTPUT
2821
id: extract_branch
29-
- name: Build and push pr image
22+
- name: Save PR number and branch name
23+
run: |
24+
mkdir -p ./pr
25+
echo ${{ github.event.number }} > ./pr/prnumber
26+
echo ${{ steps.extract_branch.outputs.branch }} > ./pr/branchname
27+
echo membermatters/membermatters:untrusted-pr-${{ steps.extract_branch.outputs.branch }} > ./pr/imagename
28+
- name: Build pr image
3029
id: docker_build
31-
uses: docker/build-push-action@v3
30+
uses: docker/build-push-action@v6
3231
with:
32+
tags: membermatters/membermatters:untrusted-pr-${{ steps.extract_branch.outputs.branch }}
33+
outputs: type=docker,dest=./pr/untrusted-pr-image.tar
3334
file: docker/Dockerfile
3435
platforms: linux/amd64
35-
push: true
36-
tags: membermatters/membermatters:untrusted-pr-${{ steps.extract_branch.outputs.branch }}
37-
38-
comment_docker_image:
39-
needs: build-docker-pr
40-
runs-on: ubuntu-latest
41-
steps:
42-
- name: Comment name of docker image
43-
id: comment_docker_image
44-
uses: actions/github-script@v6
36+
- name: Upload pr image as artifact
37+
uses: actions/upload-artifact@v4
4538
with:
46-
script: |
47-
github.rest.issues.createComment({
48-
issue_number: context.issue.number,
49-
owner: context.repo.owner,
50-
repo: context.repo.repo,
51-
body: 'Created image with name `membermatters/membermatters:untrusted-pr-${{ needs.build-docker-pr.outputs.branch }}`.'
52-
})
39+
name: pr
40+
path: ./pr/
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
name: Upload Docker Image (On PR - after build)
2+
3+
on:
4+
workflow_run:
5+
workflows: ["Build Docker Image (On PR)"]
6+
types:
7+
- completed
8+
9+
jobs:
10+
upload-docker-pr:
11+
runs-on: ubuntu-latest
12+
if: >
13+
github.event.workflow_run.event == 'pull_request' &&
14+
github.event.workflow_run.conclusion == 'success'
15+
outputs:
16+
imagename: ${{ steps.extract_image.outputs.imagename }}
17+
steps:
18+
- name: Download PR Image
19+
uses: actions/[email protected]
20+
with:
21+
script: |
22+
var artifacts = await github.actions.listWorkflowRunArtifacts({
23+
owner: context.repo.owner,
24+
repo: context.repo.repo,
25+
run_id: ${{github.event.workflow_run.id }},
26+
});
27+
var matchArtifact = artifacts.data.artifacts.filter((artifact) => {
28+
return artifact.name == "pr"
29+
})[0];
30+
var download = await github.actions.downloadArtifact({
31+
owner: context.repo.owner,
32+
repo: context.repo.repo,
33+
artifact_id: matchArtifact.id,
34+
archive_format: 'zip',
35+
});
36+
var fs = require('fs');
37+
fs.writeFileSync('${{github.workspace}}/pr.zip', Buffer.from(download.data));
38+
- run: ls -hal
39+
- name: Unzip PR Image
40+
run: |
41+
unzip pr.zip
42+
- run: ls -hal
43+
- name: Check PR Metadata
44+
run: |
45+
cat ./pr/prnumber
46+
cat ./pr/branchname
47+
cat ./pr/imagename
48+
- name: Extract image name
49+
shell: bash
50+
run: echo "imagename="$(cat test)"" | tr / - >> $GITHUB_OUTPUT
51+
id: extract_image
52+
- name: Load PR Image
53+
run: |
54+
docker load --input ./pr/untrusted-pr-image.tar
55+
docker image ls -a
56+
57+
- name: Set up Docker Buildx
58+
uses: docker/setup-buildx-action@v3
59+
- name: Login to DockerHub
60+
uses: docker/login-action@v3
61+
with:
62+
username: ${{ secrets.DOCKERHUB_USERNAME }}
63+
password: ${{ secrets.DOCKERHUB_TOKEN }}
64+
- name: Build and Push
65+
id: docker_build
66+
uses: docker/build-push-action@v6
67+
with:
68+
file: docker/Dockerfile
69+
push: true
70+
tags: ${{ steps.extract_image.outputs.imagename }}
71+
72+
comment_docker_image:
73+
needs: upload-docker-pr
74+
runs-on: ubuntu-latest
75+
steps:
76+
- name: Comment name of docker image
77+
id: comment_docker_image
78+
uses: actions/github-script@v6
79+
with:
80+
script: |
81+
github.rest.issues.createComment({
82+
issue_number: context.issue.number,
83+
owner: context.repo.owner,
84+
repo: context.repo.repo,
85+
body: 'Created image with name `${{ needs.upload-docker-pr.outputs.imagename }}`.'
86+
})

0 commit comments

Comments
 (0)