diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml new file mode 100644 index 0000000..fbc0543 --- /dev/null +++ b/.forgejo/workflows/build.yml @@ -0,0 +1,61 @@ +name: Build and Test + +on: + push: + branches: ["**"] + +env: + DOCKER_TLS_CERTDIR: /certs + IMAGE_TAG: ${{ github.sha }} + SHORT_SHA: ${{ github.sha }} + +jobs: + kanzashi-cdn: + runs-on: debian-trixie + + steps: + - name: Checkout repository + uses: actions/checkout@v7 + with: + submodules: recursive + + - name: Cache container storage + uses: actions/cache@v6 + with: + path: | + /var/lib/containers/storage + /run/containers/storage + ~/.local/share/containers/storage + key: image-cache + + - name: Login to registry + run: $RNEX_CONTAINER_PLATFORM login -u ${{ secrets.PACKAGE_USER }} -p ${{ secrets.PACKAGE_PWD }} git.spbr.net + + - name: Set short SHA + run: echo "SHORT_SHA=${GITHUB_SHA::6}" >> $GITHUB_ENV + + - name: Run tests + run: | + source "$HOME/.cargo/env" + cargo test + + - name: Build and push + env: + CI_REGISTRY_IMAGE: git.spbr.net/${{ forgejo.repository }} + CI_COMMIT_SHORT_SHA: ${{ env.SHORT_SHA }} + run: | + $RNEX_CONTAINER_PLATFORM login -u ${{ secrets.PACKAGE_USER }} -p ${{ secrets.PACKAGE_PWD }} git.spbr.net + $RNEX_CONTAINER_PLATFORM build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" . + $RNEX_CONTAINER_PLATFORM push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" + + - name: Push retagged latest + if: github.ref == 'refs/heads/main' + env: + CI_REGISTRY_IMAGE: git.spbr.net/${{ forgejo.repository }} + CI_COMMIT_SHORT_SHA: latest + CI_COMMIT_PREVIOUS_SHA: ${{ env.SHORT_SHA }} + run: | + $RNEX_CONTAINER_PLATFORM login -u ${{ secrets.PACKAGE_USER }} -p ${{ secrets.PACKAGE_PWD }} git.spbr.net + $RNEX_CONTAINER_PLATFORM pull "$CI_REGISTRY_IMAGE:$CI_COMMIT_PREVIOUS_SHA" + $RNEX_CONTAINER_PLATFORM tag "$CI_REGISTRY_IMAGE:$CI_COMMIT_PREVIOUS_SHA" "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" + $RNEX_CONTAINER_PLATFORM push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..885225d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,43 @@ +# syntax=docker/dockerfile:1 +FROM rust:alpine AS chef +RUN apk add --no-cache openssl-dev musl-dev openssl-libs-static lld git g++ make cmake +RUN cargo install cargo-chef +WORKDIR /app + +FROM chef AS planner +COPY . . +RUN cargo chef prepare --recipe-path recipe.json + +FROM chef AS builder +COPY --from=planner /app/recipe.json recipe.json + +ENV OPENSSL_LIB_DIR=/usr/lib +ENV OPENSSL_INCLUDE_DIR=/usr/include/openssl +ENV OPENSSL_STATIC=1 + +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=/app/target \ + cargo chef cook --release --recipe-path recipe.json --target x86_64-unknown-linux-musl + +COPY . . + +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=/app/target \ + cargo build --release --target x86_64-unknown-linux-musl && \ + mkdir -p /app/dist && \ + cp /app/target/x86_64-unknown-linux-musl/release/kanzashi-cdn /app/dist/ + +FROM alpine:latest AS final +RUN apk add --no-cache ca-certificates tzdata +WORKDIR /app + +COPY --from=builder /app/dist/kanzashi-cdn ./kanzashi-cdn + +COPY --from=builder /app/templates ./templates + +ENV ROCKET_ADDRESS=0.0.0.0 +ENV ROCKET_PORT=8000 + +EXPOSE 8000 + +ENTRYPOINT ["./kanzashi-cdn"] \ No newline at end of file