diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml new file mode 100644 index 0000000..f4b80c5 --- /dev/null +++ b/.forgejo/workflows/build.yml @@ -0,0 +1,56 @@ +name: Build and Test + +on: + push: + branches: ["**"] + +env: + DOCKER_TLS_CERTDIR: /certs + IMAGE_TAG: ${{ github.sha }} + SHORT_SHA: ${{ github.sha }} + +jobs: + nex-account: + runs-on: debian-trixie + + steps: + - name: Checkout repository + uses: actions/checkout@v7 + with: + submodules: recursive + + - name: Cache container storage + uses: actions/cache@v5 + 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: Build and push + env: + CI_REGISTRY_IMAGE: git.spbr.net/spacebar/nex-account + 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/spacebar/nex-account + 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..746ba2e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +# syntax=docker/dockerfile:1 +FROM rust:alpine AS chef +RUN apk add --no-cache musl-dev lld g++ make perl openssl-dev openssl-libs-static protobuf-dev ca-certificates +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 SQLX_OFFLINE=true +ENV RUSTFLAGS="-C target-feature=+aes,+sse -C relocation-model=static -C linker=ld.lld" + +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=/app/target \ + cargo chef cook --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 --target x86_64-unknown-linux-musl && \ + mkdir -p /app/dist && \ + cp /app/target/x86_64-unknown-linux-musl/debug/nex-account /app/dist/ + +FROM scratch AS final +WORKDIR / +COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ +COPY --from=builder /app/dist/nex-account /nex-account +ENTRYPOINT ["/nex-account"] \ No newline at end of file