-
Notifications
You must be signed in to change notification settings - Fork 304
141 lines (131 loc) · 6.45 KB
/
build-containers-pr.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
name: Docker smoketest build
on:
pull_request:
branches:
- "master"
- "candidate-*.x"
- "!candidate-8.2.*"
- "!candidate-8.0.*"
- "!candidate-7.12.*"
- "!candidate-7.10.*"
- "!candidate-7.8.*"
- "!candidate-7.6.*"
- "!candidate-7.4.*"
- "!candidate-7.2.*"
- "!candidate-7.0.*"
- "!candidate-6.*"
jobs:
check-skip:
# continue-on-error: true # Uncomment once integration is finished
runs-on: ubuntu-20.04
# Map a step output to a job output
outputs:
changed: ${{ steps.skip_check.outputs.dockerfiles || steps.skip_check.outputs.platform }}
steps:
- id: skip_check
uses: hpcc-systems/github-actions/changed-modules@main
with:
github_token: ${{ github.token }}
build-images:
needs: check-skip
if: ${{ needs.check-skip.outputs.changed }}
runs-on: ubuntu-20.04
steps:
- name: vars
id: vars
run: |
# echo ::set-output name=container_registry::ghcr.io
# echo ::set-output name=cr_user::${{ github.repository_owner }}
echo ::set-output name=container_registry::docker.io
echo ::set-output name=cr_user::hpccbuilds
echo ::set-output name=build_prbase_sha::${{ github.event.pull_request.base.sha }}
echo ::set-output name=build_prbase_label::${{ github.base_ref }}
echo ::set-output name=build_user::${{ github.actor }}
echo ::set-output name=build_type::RelWithDebInfo
echo ::set-output name=use_cppunit::1
echo ::set-output name=platform_build::smoketest-platform-build-vcpkg
- name: tracing
run: |
echo "Base ref = ${{ github.ref }}"
echo "Action = ${{ github.action }}"
echo "Event = ${{ github.event_name }}"
echo "Actor = ${{ github.actor }}"
echo "Ref = ${{ github.ref }}"
echo "base sha = ${{ github.event.pull_request.base.sha }}"
echo "Sha = ${{ github.sha }}"
echo "github.repository = ${{ github.repository }}"
echo "repository_owner = ${{ github.repository_owner }}"
echo "github.workspace = ${{ github.workspace }}"
echo "runner.workspace = ${{ runner.workspace }}"
echo "github.event.pull_request.head.repo.owner.login = ${{ github.event.pull_request.head.repo.owner.login }}"
echo "build_prbase_label = ${{ steps.vars.outputs.build_prbase_label }}"
echo "platform_build = ${{ steps.vars.outputs.platform_build }}"
- name: Checkout PR
uses: actions/checkout@v4
- name: Calculate vcpkg vars
id: vcpkg_vars
run: |
echo "base_ver=$(git submodule status vcpkg | cut -c2-9)" >> $GITHUB_OUTPUT
- name: tracing (vcpkg_vars)
run: |
echo "vcpkg_vars.base_ver = ${{ steps.vcpkg_vars.outputs.base_ver }}"
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker
- name: Check if PR-Base prebuilt
id: check-images
run: |
prbase_missing=$(docker manifest inspect ${{ steps.vars.outputs.container_registry }}/${{ steps.vars.outputs.cr_user }}/${{ steps.vars.outputs.platform_build }}:${{ steps.vars.outputs.build_prbase_label }}-${{ github.event.pull_request.base.sha }} > /dev/null ; echo $?)
echo prbase_missing=${prbase_missing}
if [[ "${prbase_missing}" -eq 1 ]]
then
echo "Current PR target branch image cannot be found, using latest"
prbase_missing=$(docker manifest inspect ${{ steps.vars.outputs.container_registry }}/${{ steps.vars.outputs.cr_user }}/${{ steps.vars.outputs.platform_build }}:${{ steps.vars.outputs.build_prbase_label }}-latest > /dev/null ; echo $?)
if [[ "${prbase_missing}" -eq 1 ]]
then
echo "Cannot find the 'latest' target branch image"
echo ::set-output name=prbase_missing::${prbase_missing}
fi
echo ::set-output name=platform_prbase_ver::${{ steps.vars.outputs.build_prbase_label }}-latest
else
echo ::set-output name=platform_prbase_ver::${{ steps.vars.outputs.build_prbase_label }}-${{ github.event.pull_request.base.sha }}
fi
# Normal expectation is that the following step would normally be skipped
# NB: This is only for the case where the target branch image doesn't already exist.
# The build-containers-target-branch.yml action would normally have built/published this image,
# or they'll be a "latest" which will have been picked up by the check-images step.
- name: branch image
if: ${{ steps.check-images.outputs.prbase_missing == '1' }}
uses: docker/build-push-action@v5
with:
context: .
file: ./dockerfiles/platform-build/Dockerfile
builder: ${{ steps.buildx.outputs.name }}
tags: |
${{ steps.vars.outputs.container_registry }}/${{ steps.vars.outputs.cr_user }}/${{ steps.vars.outputs.platform_build }}:${{ steps.vars.outputs.build_prbase_label }}-${{ steps.vars.outputs.build_prbase_sha }}
${{ steps.vars.outputs.container_registry }}/${{ steps.vars.outputs.cr_user }}/${{ steps.vars.outputs.platform_build }}:${{ steps.vars.outputs.build_prbase_label }}-latest
build-args: |
CR_REPO=${{ steps.vars.outputs.container_registry }}
BASE_VER=${{ steps.vcpkg_vars.outputs.base_ver }}
BUILD_USER=${{ github.repository_owner }}
GITHUB_ACTOR=${{ github.actor }}
BUILD_TAG=${{ steps.vars.outputs.build_prbase_sha }}
BUILD_TYPE=${{ steps.vars.outputs.build_type }}
GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}
USE_CPPUNIT=${{ steps.vars.outputs.use_cppunit }}
BUILD_THREADS=${{ steps.vars.outputs.build_threads }}
- name: PR image
uses: docker/build-push-action@v5
with:
context: .
file: ./dockerfiles/platform-build-incremental-container/Dockerfile
builder: ${{ steps.buildx.outputs.name }}
build-args: |
CR_USER=${{ steps.vars.outputs.cr_user }}
CR_REPO=${{ steps.vars.outputs.container_registry }}
PLATFORM_PRBASE_VER=${{ steps.check-images.outputs.platform_prbase_ver }}
GITHUB_REPO=${{ github.repository }}
GITHUB_PRREF=${{ github.ref }}
BUILD_THREADS=${{ steps.vars.outputs.build_threads }}