Skip to content

Commit

Permalink
ci: Update workflows based on http-proxy's (#18)
Browse files Browse the repository at this point in the history
Add workflows for clippy, rustfmt, cargo check and rehaul the Docker Image creation. Images will now be pushed to ghcr.io instead of Docker Hub and are now mentioned in the README.
  • Loading branch information
Gelbpunkt authored Apr 26, 2023
1 parent ce869c4 commit 3fd2b7f
Show file tree
Hide file tree
Showing 9 changed files with 223 additions and 136 deletions.
44 changes: 44 additions & 0 deletions .github/rust.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"problemMatcher": [
{
"owner": "cargo-common",
"pattern": [
{
"regexp": "^(warning|warn|error)(\\[(\\S*)\\])?: (.*)$",
"severity": 1,
"message": 4,
"code": 3
},
{
"regexp": "^\\s+-->\\s(\\S+):(\\d+):(\\d+)$",
"file": 1,
"line": 2,
"column": 3
}
]
},
{
"owner": "cargo-test",
"pattern": [
{
"regexp": "^.*panicked\\s+at\\s+'(.*)',\\s+(.*):(\\d+):(\\d+)$",
"message": 1,
"file": 2,
"line": 3,
"column": 4
}
]
},
{
"owner": "cargo-fmt",
"pattern": [
{
"regexp": "^(Diff in (\\S+)) at line (\\d+):",
"message": 1,
"file": 2,
"line": 3
}
]
}
]
}
68 changes: 68 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: CI

on:
workflow_dispatch:
pull_request:
push:

jobs:
check:
name: check
runs-on: ubuntu-latest

steps:
- name: Checkout sources
uses: actions/checkout@v3

- name: Install stable toolchain
id: toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable

- name: Setup cache
uses: Swatinem/rust-cache@v2

- run: cargo check

clippy:
name: clippy
runs-on: ubuntu-latest

steps:
- name: Checkout sources
uses: actions/checkout@v3

- name: Install stable toolchain
id: toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
components: clippy

- name: Setup cache
uses: Swatinem/rust-cache@v2

- name: Add problem matchers
run: echo "::add-matcher::.github/rust.json"

- name: Run clippy
run: cargo clippy --message-format=json

rustfmt:
name: rustfmt
runs-on: ubuntu-latest

steps:
- name: Checkout sources
uses: actions/checkout@v3

- name: Install stable toolchain
id: toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
components: rustfmt

- name: Run cargo fmt
run: cargo fmt --all -- --check
93 changes: 93 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
name: Docker build

on:
workflow_dispatch:
pull_request:
push:

jobs:
build-images:
name: Build Docker Images
runs-on: ubuntu-latest
strategy:
matrix:
include:
- tag: amd64
arch: amd64
rust-target: x86_64-unknown-linux-musl
musl-target: x86_64-linux-musl
- tag: armv8
arch: armv8
rust-target: aarch64-unknown-linux-musl
musl-target: aarch64-linux-musl

steps:
# Podman 4.x is necessary here because it supports --platform=$BUILDPLATFORM. Otherwise, podman
# would pull the base image for aarch64 when building for aarch64. See https://github.com/containers/buildah/pull/3757
# for the implementation. GitHub actions currently still ship Podman 3.x, even though 4.x has been
# out for over a year.
# The repository used is the same as GitHub actions uses for their source - just that it's the unstable version
# rather than the stable one.
# TODO: Once podman 4.x is available in actions by default (or in the Ubuntu repositories), remove this.
- name: Install podman 4.x
run: |
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.opensuse.org/repositories/devel:kubic:libcontainers:unstable/xUbuntu_$(lsb_release -rs)/Release.key \
| gpg --dearmor \
| sudo tee /etc/apt/keyrings/devel_kubic_libcontainers_unstable.gpg > /dev/null
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/devel_kubic_libcontainers_unstable.gpg]\
https://download.opensuse.org/repositories/devel:kubic:libcontainers:unstable/xUbuntu_$(lsb_release -rs)/ /" \
| sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:unstable.list > /dev/null
sudo apt -qq -y purge buildah podman
sudo apt -qq -y autoremove --purge
sudo apt update -qq
sudo apt -qq -y install podman
- name: Checkout sources
uses: actions/checkout@v3

- name: Login to ghcr
if: github.ref == 'refs/heads/trunk' && github.event_name != 'pull_request'
run: |
echo "${{ secrets.GITHUB_TOKEN }}" | podman login -u ${{ github.repository_owner }} --password-stdin ghcr.io
- name: Convert GITHUB_REPOSITORY into lowercase
run: |
echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}
- name: Build ${{ matrix.tag }}
run: |
podman build \
--format docker \
--arch ${{ matrix.arch }} \
--build-arg RUST_TARGET=${{ matrix.rust-target }} \
--build-arg MUSL_TARGET=${{ matrix.musl-target }} \
-t gateway-queue:${{ matrix.tag }} \
.
- name: Push image to ghcr
if: github.ref == 'refs/heads/trunk' && github.event_name != 'pull_request'
run: |
podman tag gateway-queue:${{ matrix.tag }} ghcr.io/${REPO}:${{ matrix.tag }}
podman push ghcr.io/${REPO}:${{ matrix.tag }}
create-manifest:
name: Create Docker manifests
runs-on: ubuntu-latest
needs: build-images
if: github.ref == 'refs/heads/trunk' && github.event_name != 'pull_request'

steps:
- name: Login to ghcr
run: |
echo "${{ secrets.GITHUB_TOKEN }}" | podman login -u ${{ github.repository_owner }} --password-stdin ghcr.io
- name: Convert GITHUB_REPOSITORY into lowercase
run: |
echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}
- name: Create manifest and push it
run: |
podman manifest create gateway-queue-latest docker://ghcr.io/${REPO}:amd64 docker://ghcr.io/${REPO}:armv8
podman manifest push --format v2s2 gateway-queue-latest docker://ghcr.io/${REPO}:latest
40 changes: 0 additions & 40 deletions .github/workflows/publish.yml

This file was deleted.

17 changes: 0 additions & 17 deletions .github/workflows_disabled/audit.yml

This file was deleted.

50 changes: 0 additions & 50 deletions .github/workflows_disabled/lint.yml

This file was deleted.

22 changes: 0 additions & 22 deletions .github/workflows_disabled/test.yml

This file was deleted.

19 changes: 15 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ARG RUST_TARGET="x86_64-unknown-linux-musl"
# Musl target, either x86_64-linux-musl, aarch64-linux-musl, arm-linux-musleabi, etc.
ARG MUSL_TARGET="x86_64-linux-musl"

FROM alpine:latest as build
FROM --platform=$BUILDPLATFORM docker.io/alpine:latest as build
ARG RUST_TARGET
ARG MUSL_TARGET

Expand All @@ -21,11 +21,22 @@ RUN source $HOME/.cargo/env && \
ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-ld" "/usr/bin/$MUSL_TARGET-ld" && \
ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-strip" "/usr/bin/actual-strip" && \
GCC_VERSION=$($MUSL_TARGET-gcc --version | grep gcc | awk '{print $3}') && \
echo -e "[build]\nrustflags = [\"-L\", \"native=/$MUSL_TARGET-cross/$MUSL_TARGET/lib\", \"-L\", \"native=/$MUSL_TARGET-cross/lib/gcc/$MUSL_TARGET/$GCC_VERSION/\", \"-l\", \"static=gcc\", \"-Z\", \"gcc-ld=lld\"]\n[target.$RUST_TARGET]\nlinker = \"$MUSL_TARGET-gcc\"\n[unstable]\nbuild-std = [\"std\", \"panic_abort\"]\n" > /app/.cargo/config; \
echo -e "\
[build]\n\
rustflags = [\"-L\", \"native=/$MUSL_TARGET-cross/$MUSL_TARGET/lib\", \"-L\", \"native=/$MUSL_TARGET-cross/lib/gcc/$MUSL_TARGET/$GCC_VERSION/\", \"-l\", \"static=gcc\", \"-Z\", \"gcc-ld=lld\"]\n\
[target.$RUST_TARGET]\n\
linker = \"$MUSL_TARGET-gcc\"\n\
[unstable]\n\
build-std = [\"std\", \"panic_abort\"]\n\
" > /app/.cargo/config; \
else \
echo "skipping toolchain as we are native" && \

echo -e "[build]\nrustflags = [\"-L\", \"native=/usr/lib\"]\n[unstable]\nbuild-std = [\"std\", \"panic_abort\"]\n" > /app/.cargo/config && \
echo -e "\
[build]\n\
rustflags = [\"-L\", \"native=/usr/lib\"]\n\
[unstable]\n\
build-std = [\"std\", \"panic_abort\"]\n\
" > /app/.cargo/config && \
ln -s /usr/bin/strip /usr/bin/actual-strip; \
fi

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,10 @@ reqwest::get("http://gateway-queue?shard=42").await?;

### Running it

If you're using Docker, you can clone the repo and run:
If you're using Docker, you can use the prebuilt Docker images from [Github's container registry].

```sh
$ docker build . -t twilight-gateway-queue
$ docker run -itd -e HOST=0.0.0.0 -e PORT=5000 twilight-gateway-queue
$ docker run -itd -e HOST=0.0.0.0 -e PORT=5000 ghcr.io/twilight-rs/gateway-queue
```

If you're not, you can compile it via Cargo:
Expand All @@ -70,6 +69,7 @@ $ HOST=0.0.0.0 PORT=5000 ./target/release/twilight-gateway-queue
[ci]: https://github.com/twilight-rs/gateway-queue/actions
[docs]: https://twilight-rs.github.io/chapter_3_services/section_5_gateway_queue.html
[docs-badge]: https://img.shields.io/badge/docs-online-5023dd.svg?style=flat-square
[Github's container registry]: https://github.com/twilight-rs/gateway-queue/pkgs/container/gateway-queue
[license-badge]: https://img.shields.io/badge/license-ISC-blue.svg?style=flat-square
[license]: https://opensource.org/licenses/ISC
[LICENSE.md]: https://github.com/twilight-rs/gateway-queue/blob/master/LICENSE.md
Expand Down

0 comments on commit 3fd2b7f

Please sign in to comment.