Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 51 additions & 36 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,60 +1,75 @@
name: Build and Publish
on: [push]
on:
push:
branches: [main]
tags: ['*']
pull_request:
branches: [main]

jobs:

lint:
name: Lint Dockerfile
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/checkout@v6
- run: npm i
- run: npm test

build_and_publish:
needs: lint
name: Build and publish Docker image
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@master
- uses: actions/checkout@v6

- name: Build image
run: docker build -t gcp-ruby .
- name: Set up QEMU
uses: docker/setup-qemu-action@v4

- name: Test Ruby
run: docker run gcp-ruby bash -c "which ruby || exit 1"
- name: Set up Buildx
uses: docker/setup-buildx-action@v4

- name: Test Bundler
run: docker run gcp-ruby bash -c "which bundle || exit 1"

- name: Test Google Cloud SDK
run: docker run gcp-ruby bash -c "which gcloud || exit 1"

- name: Test Node.js
run: docker run gcp-ruby bash -c "which node || exit 1"

- name: Test Yarn
run: docker run gcp-ruby bash -c "which yarn || exit 1"

- name: Test Chrome
run: docker run gcp-ruby bash -c "which google-chrome || exit 1"
- name: Docker login
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}

- name: Test Docker
run: docker run gcp-ruby bash -c "which docker || exit 1"
- name: Compute tags
id: meta
uses: docker/metadata-action@v6
with:
images: savingsutd/gcp-ruby
tags: |
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
type=ref,event=tag

- name: Docker login
run: |
echo ${{ secrets.DOCKER_ACCESS_TOKEN }} | docker login --username ${{ secrets.DOCKER_USERNAME }} --password-stdin
- name: Build amd64 for smoke tests
uses: docker/build-push-action@v7
with:
context: .
platforms: linux/amd64
load: true
tags: gcp-ruby:test
cache-from: type=gha
cache-to: type=gha,mode=max

- name: Publish latest
- name: Smoke test binaries
run: |
docker tag gcp-ruby savingsutd/gcp-ruby:latest &&
docker push savingsutd/gcp-ruby:latest
if: success() && github.ref == 'refs/heads/main'
for bin in ruby bundle gcloud node yarn google-chrome docker; do
docker run --rm gcp-ruby:test bash -c "which $bin" || exit 1
done

- name: Publish release
run: |
export RELEASE_TAG=$(echo $GITHUB_REF | sed -e 's,.*/\(.*\),\1,') &&
docker tag gcp-ruby savingsutd/gcp-ruby:$RELEASE_TAG &&
docker push savingsutd/gcp-ruby:$RELEASE_TAG
if: success() && contains(github.ref, 'refs/tags')
- name: Build and push multi-arch
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')
uses: docker/build-push-action@v7
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
20 changes: 10 additions & 10 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@ FROM ruby:3.4.9
LABEL version="3.4.9"
LABEL maintainer="Ain Tohvri <ain.tohvri@samwise-media.com>"

RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" \
| tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg && \
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh && \
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg && \
echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list && \
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | gpg --dearmor -o /usr/share/keyrings/chrome.gpg && \
sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' && \
echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" \
| tee /etc/apt/sources.list.d/nodesource.list && \
apt update && \
apt install -y google-cloud-sdk nodejs google-chrome-unstable python3-setuptools imagemagick libmagickwand-dev xvfb --no-install-recommends && \
apt install -y --no-install-recommends \
google-cloud-sdk nodejs chromium python3-setuptools imagemagick libmagickwand-dev xvfb && \
ln -sf /usr/bin/chromium /usr/local/bin/google-chrome && \
npm install -g corepack && \
yarn set version stable && \
rm /package.json && \
apt autoremove && \
apt autoclean && \
rm -rf /var/lib/apt/lists/* && \
rm -rf /var/lib/cache/*
rm -f /package.json && \
apt autoremove -y && apt autoclean && \
rm -rf /var/lib/apt/lists/* /var/lib/cache/*
Loading