-
Notifications
You must be signed in to change notification settings - Fork 4
137 lines (135 loc) · 5.37 KB
/
build-cartographer-ws.yaml
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
name: Build Docker Image for cartographer-ws
on:
workflow_run:
workflows: ["Build Docker Image for template-ws"]
types: [completed]
jobs:
paths-filter:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
outputs:
results: ${{ steps.filter.outputs.results }}
steps:
# Ref: https://github.com/dorny/paths-filter/issues/147#issuecomment-1287800590
- name: Download a single artifact
uses: dawidd6/action-download-artifact@v7
with:
workflow: build-template-ws.yaml
name: original-refs
workflow_conclusion: success
- name: set REF_BASE to env
run: |
echo "BASE=$(cat base.txt)" >> $GITHUB_ENV
echo "CURRENT_BRANCH=$(cat current-branch.txt)" >> $GITHUB_ENV
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
base: ${{ env.BASE }}
ref: ${{ env.CURRENT_BRANCH }}
filters: |
results:
- .github/workflows/build-cartographer-ws.yaml
- cartographer_ws/docker/Dockerfile
- cartographer_ws/docker/.dockerignore
- cartographer_ws/docker/.bashrc
- name: Changes matched
if: steps.filter.outputs.results == 'true'
run: echo "Changes matched, will build image"
- name: Changes didn't match
if: steps.filter.outputs.results != 'true'
run: echo "Changes didn't match, will NOT build image"
docker:
needs: paths-filter
if: ${{ needs.paths-filter.outputs.results == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Maximize build space
uses: easimon/maximize-build-space@master
with:
build-mount-path: /var/lib/docker/
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
remove-docker-images: 'true'
- name: Restart docker
run: sudo service docker restart
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- # Ref: https://docs.github.com/en/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions#upgrading-a-workflow-that-accesses-a-registry-using-a-personal-access-token
name: Prepare tag name as environment variable
run: |
# This strips the git ref prefix from the version.
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')
# This strips the "v" prefix from the tag name.
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')
# This uses the Docker `latest` tag convention.
[ "$VERSION" == "main" ] && VERSION=latest
# Output the environment variable
# Ref: https://stackoverflow.com/a/57989070
echo "VERSION=$VERSION" >> $GITHUB_ENV
# Print for debugging purpose
echo "VERSION=$VERSION"
- name: Docker meta
id: meta
# Ref: https://github.com/docker/metadata-action
uses: docker/metadata-action@v5
with:
# Link: https://hub.docker.com/repository/docker/j3soon/ros2-cartographer-ws/tags
images: j3soon/ros2-cartographer-ws
tags: |
type=raw,value={{date 'YYYYMMDD'}}
type=raw,value=${{ env.VERSION }}
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: j3soon
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Pull j3soon/ros2-template-ws (amd64)
run: docker pull --platform linux/amd64 j3soon/ros2-template-ws
- name: Pull j3soon/ros2-template-ws (arm64)
run: docker pull --platform linux/arm64 j3soon/ros2-template-ws
- name: Build image
uses: docker/build-push-action@v6
with:
context: cartographer_ws/docker
cache-from: |
j3soon/ros2-template-ws:buildcache-amd64
j3soon/ros2-template-ws:buildcache-arm64
platforms: linux/amd64,linux/arm64
tags: ${{ steps.meta.outputs.tags }}
- name: Push amd64 cache
uses: docker/build-push-action@v6
with:
context: cartographer_ws/docker
cache-from: |
j3soon/ros2-template-ws:buildcache-amd64
j3soon/ros2-template-ws:buildcache-arm64
cache-to: type=registry,ref=j3soon/ros2-cartographer-ws:buildcache-amd64,mode=max
platforms: linux/amd64
tags: ${{ steps.meta.outputs.tags }}
- name: Push arm64 cache
uses: docker/build-push-action@v6
with:
context: cartographer_ws/docker
cache-from: |
j3soon/ros2-template-ws:buildcache-amd64
j3soon/ros2-template-ws:buildcache-arm64
cache-to: type=registry,ref=j3soon/ros2-cartographer-ws:buildcache-arm64,mode=max
platforms: linux/arm64
tags: ${{ steps.meta.outputs.tags }}
- name: Push image
uses: docker/build-push-action@v6
with:
context: cartographer_ws/docker
cache-from: |
j3soon/ros2-template-ws:buildcache-amd64
j3soon/ros2-template-ws:buildcache-arm64
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}