Skip to content

Commit

Permalink
feat: use cross to build
Browse files Browse the repository at this point in the history
  • Loading branch information
Yuki WADA committed Apr 11, 2023
1 parent b4593a6 commit 18be7c5
Show file tree
Hide file tree
Showing 8 changed files with 125 additions and 89 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build and release application
name: Checking
on:
push:

Expand All @@ -19,7 +19,7 @@ jobs:
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: 1.68.0
toolchain: 1.68.2
target: x86_64-unknown-linux-musl
components: clippy, rustfmt

Expand All @@ -39,9 +39,6 @@ jobs:
run: cargo fmt --all -- --check
working-directory: ./server

- name: Install Deps
run: sudo apt install -y musl-tools build-essential

- name: Cargo build
run: cargo build
working-directory: ./server
Expand All @@ -55,48 +52,3 @@ jobs:
- name: Cargo test
run: cargo test --all-features
working-directory: ./server

build-image:
name: Build server docker image (and publish on main)
needs: [ lint-and-test ]
runs-on: ubuntu-latest
outputs:
image_tag: ${{ steps.meta.outputs.tags }}
concurrency:
group: ${{ github.ref }}-docker-build
cancel-in-progress: true
steps:
- name: checkout
uses: actions/checkout@v3

- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v2

- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ env.image_name }}
tags: |
type=sha,prefix=sha-,suffix=,format=short
- name: Build (and push if on main)
id: docker_build
uses: docker/build-push-action@v4
with:
context: ./server
file: ./Dockerfile
builder: ${{ steps.buildx.outputs.name }}
push: ${{ github.ref == 'refs/heads/main' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
# すべてのビルドステージのすべてのレイヤーをキャッシュして欲しいのでmode=max
cache-to: type=gha,mode=max
97 changes: 97 additions & 0 deletions .github/workflows/image-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: Release docker images

on:
push:
branches:
- feature/cross

jobs:
build:
name: Build for ${{ matrix.docker-platform }}
strategy:
fail-fast: false
matrix:
include:
-
docker-platform: linux/amd64
cross-target: x86_64-unknown-linux-gnu
-
docker-platform: linux/arm64/v8
cross-target: aarch64-unknown-linux-gnu
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@master
-
name: Setup rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: 1.68.2
target: ${{ matrix.cross-target }}
override: true
-
name: Build binary using cross
uses: actions-rs/cargo@v1
with:
use-cross: true
command: build
args: --manifest-path server/Cargo.toml --target ${{ matrix.cross-target }} --release
-
name: Upload artifact to collect in next job
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.cross-target }}
path: server/target/${{ matrix.cross-target }}/release/entrypoint

release-all:
name: Push docker image for all platforms
runs-on: ubuntu-latest
needs: build
env:
image_name: seichi-portal-backend
steps:
-
name: Checkout
uses: actions/checkout@master
-
uses: actions/download-artifact@v3
with:
name: x86_64-unknown-linux-gnu
path: docker/artifacts/x86_64-unknown-linux-gnu
-
uses: actions/download-artifact@v3
with:
name: aarch64-unknown-linux-gnu
path: docker/artifacts/aarch64-unknown-linux-gnu
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
-
id: prepare_image_id
name: Prepare image id's components
run: |
image_id=ghcr.io/${{ github.repository_owner }}/${{ env.image_name }}
echo "lowercase_id=$(echo $image_id | tr '[A-Z]' '[a-z]')" >> $GITHUB_OUTPUT
echo "short-ref=$(git rev-parse --short "$GITHUB_SHA")" >> $GITHUB_OUTPUT
echo "branch=$(echo ${GITHUB_REF#refs/heads/} | tr / -)" >> $GITHUB_OUTPUT
-
name: Build and push
uses: docker/build-push-action@v4
with:
context: docker
platforms: linux/amd64,linux/arm64/v8
push: true
tags: |
${{ steps.prepare_image_id.outputs.lowercase_id }}:latest
${{ steps.prepare_image_id.outputs.lowercase_id }}:${{ steps.prepare_image_id.outputs.branch }}-${{ steps.prepare_image_id.outputs.short-ref }}
36 changes: 0 additions & 36 deletions Dockerfile

This file was deleted.

12 changes: 12 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# syntax=docker/dockerfile:1.4
FROM ubuntu:latest
LABEL org.opencontainers.image.source=https://github.com/GiganticMinecraft/seichi-portal-backend

COPY --link / /work/
RUN ls
COPY /seichi-portal-backend.sh /etc/service/seichi-portal-backend/run

RUN chmod +x /work/copy-platform-artifact.sh
RUN chmod +x /etc/service/seichi-portal-backend/run
RUN /work/copy-platform-artifact.sh
RUN chmod +x /usr/local/bin/seichi-portal-backend
11 changes: 11 additions & 0 deletions docker/copy-platform-artifact.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/sh

case $(uname -m) in
# linux/amd64
"x86_64" ) cp /work/artifacts/x86_64-unknown-linux-gnu/entrypoint /usr/local/bin/seichi-portal-backend ;;
# linux/arm/v7
"armv7l" ) cp /work/artifacts/armv7-unknown-linux-gnueabihf/entrypoint /usr/local/bin/seichi-portal-backend ;;
# linux/arm64/v8
"aarch64" ) cp /work/artifacts/aarch64-unknown-linux-gnu/entrypoint /usr/local/bin/seichi-portal-backend ;;
* ) exit 1 # we do not expect other platform
esac
2 changes: 2 additions & 0 deletions docker/seichi-portal-backend.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/bin/sh
exec /usr/local/bin/seichi-poartal-backend
2 changes: 1 addition & 1 deletion rust-toolchain.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[toolchain]
channel = "1.68.0"
channel = "1.68.2"
components = [ "rustfmt", "clippy", "cargo" ]
profile = "minimal"
2 changes: 0 additions & 2 deletions server/.cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,2 +0,0 @@
[build]
target = "x86_64-unknown-linux-musl"

0 comments on commit 18be7c5

Please sign in to comment.