From badf964cf315cd9de952cfa2803a7db6018dff8e Mon Sep 17 00:00:00 2001 From: SkyBird233 <52884766+SkyBird233@users.noreply.github.com> Date: Thu, 4 Sep 2025 19:53:37 +0800 Subject: [PATCH] feat(paste-server-rs): add docker related featrues - Add compose.yml for local testing - Update CI to build images --- .github/workflows/paste-server-rs.yml | 42 +++++++++++++++++++++++++++ paste-server-rs/.dockerignore | 5 ++++ paste-server-rs/Dockerfile | 13 +++++++++ paste-server-rs/compose.yml | 30 +++++++++++++++++++ 4 files changed, 90 insertions(+) create mode 100644 paste-server-rs/.dockerignore create mode 100644 paste-server-rs/Dockerfile create mode 100644 paste-server-rs/compose.yml diff --git a/.github/workflows/paste-server-rs.yml b/.github/workflows/paste-server-rs.yml index 8b54392..b7bd210 100644 --- a/.github/workflows/paste-server-rs.yml +++ b/.github/workflows/paste-server-rs.yml @@ -15,6 +15,10 @@ on: - 'paste-server-rs/**' workflow_dispatch: +env: + REGISTRY: ghcr.io + IMAGE_NAME: aosc-dev/paste-server-rs + jobs: build: runs-on: ubuntu-latest @@ -47,3 +51,41 @@ jobs: with: name: paste-server-rs path: paste-server-rs/target/release/paste-server-rs + + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + attestations: write + id-token: write + steps: + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push Docker image + id: push + uses: docker/build-push-action@v6 + with: + context: "{{defaultContext}}:paste-server-rs" + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Generate artifact attestation + uses: actions/attest-build-provenance@v3 + with: + subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + subject-digest: ${{ steps.push.outputs.digest }} + push-to-registry: true + diff --git a/paste-server-rs/.dockerignore b/paste-server-rs/.dockerignore new file mode 100644 index 0000000..a73e6b0 --- /dev/null +++ b/paste-server-rs/.dockerignore @@ -0,0 +1,5 @@ +compose.yml +contents +target +test +.env diff --git a/paste-server-rs/Dockerfile b/paste-server-rs/Dockerfile new file mode 100644 index 0000000..2792f3f --- /dev/null +++ b/paste-server-rs/Dockerfile @@ -0,0 +1,13 @@ +FROM rust:1-alpine AS builder + +WORKDIR /app +RUN apk add --no-cache musl-dev +COPY . . +RUN cargo build --release + +FROM alpine:latest AS runner + +WORKDIR /app +COPY --from=builder /app/target/release/paste-server-rs . +EXPOSE 2334 +CMD ["./paste-server-rs"] diff --git a/paste-server-rs/compose.yml b/paste-server-rs/compose.yml new file mode 100644 index 0000000..5d6ac9a --- /dev/null +++ b/paste-server-rs/compose.yml @@ -0,0 +1,30 @@ +services: + app: + build: . + container_name: paste-server-rs + depends_on: + - db + ports: + - "127.0.0.1:2334:2334" + volumes: + - contents:/app/contents + environment: + - PASTE_LISTEN_ADDRESS=0.0.0.0:2334 + - DATABASE_URL=postgresql://postgres:password@db/paste + - PASTE_DB_ADDRESS=postgresql://postgres:password@db/paste + - PASTE_FILE_DIR=/app/contents + - PUBLIC_PASTE_URL=http://localhost:2334 + + db: + image: postgres:17 + container_name: paste-db + volumes: + - postgres_data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=password + - POSTGRES_DB=paste + +volumes: + postgres_data: + contents: