Skip to content

Commit 62290aa

Browse files
author
David Zuckerman
committed
setting up actions
removed reference to Geodata in build.yml
1 parent 793ca06 commit 62290aa

File tree

6 files changed

+272
-27
lines changed

6 files changed

+272
-27
lines changed

.github/workflows/build.yml

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
name: Build / Test / Push
2+
3+
on:
4+
push:
5+
branches:
6+
- '**'
7+
workflow_dispatch:
8+
9+
env:
10+
BUILD_SUFFIX: -build-${{ github.run_id }}_${{ github.run_attempt }}
11+
DOCKER_METADATA_SET_OUTPUT_ENV: 'true'
12+
13+
jobs:
14+
build:
15+
runs-on: ${{ matrix.runner }}
16+
outputs:
17+
image-arm64: ${{ steps.gen-output.outputs.image-arm64 }}
18+
image-x64: ${{ steps.gen-output.outputs.image-x64 }}
19+
strategy:
20+
fail-fast: false
21+
matrix:
22+
runner:
23+
- ubuntu-24.04
24+
- ubuntu-24.04-arm
25+
steps:
26+
- name: Checkout code
27+
uses: actions/checkout@v4
28+
29+
- name: Set up Docker Buildx
30+
uses: docker/setup-buildx-action@v3
31+
32+
- name: Login to GitHub Container Registry
33+
uses: docker/login-action@v3
34+
with:
35+
registry: ghcr.io
36+
username: ${{ github.actor }}
37+
password: ${{ secrets.GITHUB_TOKEN }}
38+
39+
- id: build-meta
40+
name: Docker meta
41+
uses: docker/metadata-action@v5
42+
with:
43+
images: ghcr.io/${{ github.repository }}
44+
tags: type=sha,suffix=${{ env.BUILD_SUFFIX }}
45+
46+
# Build cache is shared among all builds of the same architecture
47+
- id: cache-meta
48+
name: Docker meta
49+
uses: docker/metadata-action@v5
50+
with:
51+
images: ghcr.io/${{ github.repository }}
52+
tags: type=raw,value=buildcache-${{ runner.arch }}
53+
54+
- id: get-registry
55+
name: Get the sanitized registry name
56+
run: |
57+
echo "registry=$(echo '${{ steps.build-meta.outputs.tags }}' | cut -f1 -d:)" | tee -a "$GITHUB_OUTPUT"
58+
59+
- id: build
60+
name: Build/push the arch-specific image
61+
uses: docker/build-push-action@v6
62+
with:
63+
cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }}
64+
cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max
65+
labels: ${{ steps.build-meta.outputs.labels }}
66+
provenance: mode=max
67+
sbom: true
68+
tags: ${{ steps.get-registry.outputs.registry }}
69+
outputs: type=image,push-by-digest=true,push=true
70+
71+
- id: gen-output
72+
name: Write arch-specific image digest to outputs
73+
run: |
74+
echo "image-${RUNNER_ARCH,,}=${{ steps.get-registry.outputs.registry }}@${{ steps.build.outputs.digest }}" | tee -a "$GITHUB_OUTPUT"
75+
76+
merge:
77+
runs-on: ubuntu-24.04
78+
needs: build
79+
env:
80+
DOCKER_APP_IMAGE_ARM64: ${{ needs.build.outputs.image-arm64 }}
81+
DOCKER_APP_IMAGE_X64: ${{ needs.build.outputs.image-x64 }}
82+
outputs:
83+
image: ${{ steps.meta.outputs.tags }}
84+
steps:
85+
- name: Checkout code
86+
uses: actions/checkout@v4
87+
88+
- name: Set up Docker Buildx
89+
uses: docker/setup-buildx-action@v3
90+
91+
- name: Login to GitHub Container Registry
92+
uses: docker/login-action@v3
93+
with:
94+
registry: ghcr.io
95+
username: ${{ github.actor }}
96+
password: ${{ secrets.GITHUB_TOKEN }}
97+
98+
- id: meta
99+
name: Generate tag for the app image
100+
uses: docker/metadata-action@v5
101+
with:
102+
images: ghcr.io/${{ github.repository }}
103+
tags: type=sha,suffix=${{ env.BUILD_SUFFIX }}
104+
105+
- name: Push the multi-platform app image
106+
run: |
107+
docker buildx imagetools create \
108+
--tag "$DOCKER_METADATA_OUTPUT_TAGS" \
109+
"$DOCKER_APP_IMAGE_ARM64" "$DOCKER_APP_IMAGE_X64"
110+
111+
test:
112+
runs-on: ubuntu-24.04
113+
needs: merge
114+
env:
115+
COMPOSE_FILE: docker-compose.yml:docker-compose.ci.yml
116+
DOCKER_APP_IMAGE: ${{ needs.merge.outputs.image }}
117+
steps:
118+
- name: Checkout code
119+
uses: actions/checkout@v4
120+
121+
- name: Set up Docker Compose
122+
uses: docker/setup-compose-action@v1
123+
124+
- name: Login to GitHub Container Registry
125+
uses: docker/login-action@v3
126+
with:
127+
registry: ghcr.io
128+
username: ${{ github.actor }}
129+
password: ${{ secrets.GITHUB_TOKEN }}
130+
131+
- name: Setup the stack
132+
run: |
133+
docker compose build --quiet
134+
docker compose pull --quiet
135+
docker compose up --wait
136+
docker compose exec -u root app chown -R alma:alma artifacts
137+
138+
- name: Run RSpec
139+
if: ${{ always() }}
140+
run: |
141+
docker compose exec -e RAILS_ENV=test app rspec --format progress --format html --out artifacts/rspec.html
142+
143+
- name: Copy out artifacts
144+
if: ${{ always() }}
145+
run: |
146+
docker compose cp app:/opt/app/artifacts ./
147+
docker compose logs > artifacts/docker-compose-services.log
148+
docker compose config > artifacts/docker-compose.merged.yml
149+
150+
- name: Upload the test report
151+
if: ${{ always() }}
152+
uses: actions/upload-artifact@v4
153+
with:
154+
name: Gobi Build Report (${{ github.run_id }}_${{ github.run_attempt }})
155+
path: artifacts/*
156+
if-no-files-found: error
157+
158+
push:
159+
runs-on: ubuntu-24.04
160+
needs:
161+
- merge
162+
- test
163+
env:
164+
DOCKER_APP_IMAGE: ${{ needs.merge.outputs.image }}
165+
steps:
166+
- name: Checkout code
167+
uses: actions/checkout@v4
168+
169+
- name: Login to GitHub Container Registry
170+
uses: docker/login-action@v3
171+
with:
172+
registry: ghcr.io
173+
username: ${{ github.actor }}
174+
password: ${{ secrets.GITHUB_TOKEN }}
175+
176+
- name: Produce permanent image tags
177+
uses: docker/metadata-action@v5
178+
with:
179+
images: ghcr.io/${{ github.repository }}
180+
tags: |
181+
type=sha
182+
type=ref,event=branch
183+
type=raw,value=latest,enable={{is_default_branch}}
184+
185+
- name: Retag and push the image
186+
run: |
187+
docker pull "$DOCKER_APP_IMAGE"
188+
echo "$DOCKER_METADATA_OUTPUT_TAGS" | tr ' ' '\n' | xargs -n1 docker tag "$DOCKER_APP_IMAGE"
189+
docker push --all-tags "$(echo "$DOCKER_APP_IMAGE" | cut -f1 -d:)"

.github/workflows/release.yml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: Push Release Tags
2+
3+
on:
4+
push:
5+
tags:
6+
- '**'
7+
workflow_dispatch:
8+
9+
env:
10+
DOCKER_METADATA_SET_OUTPUT_ENV: 'true'
11+
12+
jobs:
13+
retag:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- name: Checkout code
17+
uses: actions/checkout@v4
18+
19+
- name: Set up Docker Buildx
20+
uses: docker/setup-buildx-action@v3
21+
22+
- name: Login to GitHub Container Registry
23+
uses: docker/login-action@v3
24+
with:
25+
registry: ghcr.io
26+
username: ${{ github.actor }}
27+
password: ${{ secrets.GITHUB_TOKEN }}
28+
29+
- name: Determine the sha-based image tag to retag
30+
id: get-base-image
31+
uses: docker/metadata-action@v5
32+
with:
33+
images: ghcr.io/${{ github.repository }}
34+
tags: type=sha
35+
36+
- name: Verify that the image was previously built
37+
env:
38+
BASE_IMAGE: ${{ steps.get-base-image.outputs.tags }}
39+
run: |
40+
docker pull "$BASE_IMAGE"
41+
42+
- name: Produce release tags
43+
id: tag-meta
44+
uses: docker/metadata-action@v5
45+
with:
46+
images: ghcr.io/${{ github.repository }}
47+
flavor: latest=false
48+
tags: |
49+
type=ref,event=tag
50+
type=semver,pattern={{major}}
51+
type=semver,pattern={{major}}.{{minor}}
52+
type=semver,pattern={{version}}
53+
54+
- name: Retag the pulled image
55+
env:
56+
BASE_IMAGE: ${{ steps.get-base-image.outputs.tags }}
57+
run: |
58+
echo "$DOCKER_METADATA_OUTPUT_TAGS" | tr ' ' '\n' | xargs -n1 docker tag "$BASE_IMAGE"
59+
docker push --all-tags "$(echo "$BASE_IMAGE" | cut -f1 -d:)"

Gemfile.lock

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ GEM
88
cucumber (>= 4.0, < 8.0)
99
rspec-expectations (~> 3.4)
1010
thor (~> 1.0)
11-
ast (2.4.2)
11+
ast (2.4.3)
1212
builder (3.2.4)
1313
childprocess (4.1.0)
1414
contracts (0.17)
@@ -59,13 +59,15 @@ GEM
5959
multi_test (0.1.2)
6060
nokogiri (1.13.3-x86_64-linux)
6161
racc (~> 1.4)
62-
parallel (1.22.1)
63-
parser (3.1.2.0)
62+
parallel (1.27.0)
63+
parser (3.3.10.0)
6464
ast (~> 2.4.1)
65+
racc
66+
prism (1.6.0)
6567
racc (1.6.0)
6668
rainbow (3.1.1)
6769
rake (13.0.6)
68-
regexp_parser (2.3.0)
70+
regexp_parser (2.11.3)
6971
rexml (3.2.5)
7072
rspec (3.11.0)
7173
rspec-core (~> 3.11.0)
@@ -82,7 +84,7 @@ GEM
8284
rspec-support (3.11.0)
8385
rspec_junit_formatter (0.5.1)
8486
rspec-core (>= 2, < 4, != 2.12.0)
85-
rubocop (1.27.0)
87+
rubocop (1.26.1)
8688
parallel (~> 1.10)
8789
parser (>= 3.1.0.0)
8890
rainbow (>= 2.2.2, < 4.0)
@@ -91,21 +93,23 @@ GEM
9193
rubocop-ast (>= 1.16.0, < 2.0)
9294
ruby-progressbar (~> 1.7)
9395
unicode-display_width (>= 1.4.0, < 3.0)
94-
rubocop-ast (1.17.0)
95-
parser (>= 3.1.1.0)
96+
rubocop-ast (1.48.0)
97+
parser (>= 3.3.7.2)
98+
prism (~> 1.4)
9699
rubocop-checkstyle_formatter (0.5.0)
97100
rubocop (>= 1.14.0)
98-
ruby-progressbar (1.11.0)
101+
ruby-progressbar (1.13.0)
99102
scrub_rb (1.0.1)
100103
sys-uname (1.2.2)
101104
ffi (~> 1.1)
102105
thor (1.2.1)
103106
unf (0.1.4)
104107
unf_ext
105108
unf_ext (0.0.8)
106-
unicode-display_width (2.1.0)
109+
unicode-display_width (2.6.0)
107110

108111
PLATFORMS
112+
aarch64-linux
109113
x86_64-linux
110114

111115
DEPENDENCIES
@@ -118,7 +122,7 @@ DEPENDENCIES
118122
rake
119123
rspec
120124
rspec_junit_formatter
121-
rubocop
125+
rubocop (~> 1.26.0)
122126
rubocop-checkstyle_formatter
123127
thor (~> 1.1)
124128

Jenkinsfile

Lines changed: 0 additions & 15 deletions
This file was deleted.

docker-compose.ci.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
services:
2+
app:
3+
build: !reset
4+
image: ${DOCKER_APP_IMAGE}
5+
volumes: !override
6+
- artifacts:/opt/app/artifacts
7+
8+
volumes:
9+
artifacts:

docker-compose.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
services:
2-
gobi:
2+
app:
33
build: .
44
command: watch --interval 600
5-
image: containers.lib.berkeley.edu/lap/gobi/development:latest
65
init: yes
76
volumes:
87
- ./:/opt/app:rw

0 commit comments

Comments
 (0)