diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml new file mode 100644 index 0000000..7b19e39 --- /dev/null +++ b/.gitea/workflows/build.yaml @@ -0,0 +1,80 @@ +name: Build and Push + +on: + push: + branches: [main] + pull_request: + branches: [main] + +env: + REGISTRY: forgejo.riotpiao.com + IMAGE: forgejo.riotpiao.com/rock/poimen-memory + +jobs: + test: + name: Test + runs-on: rust + container: rust:1-bookworm + steps: + - name: Install node (required by JS-based actions) + run: apt-get update && apt-get install -y --no-install-recommends nodejs + + - uses: actions/checkout@v4 + + - name: Cache cargo + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: cargo-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + cargo-${{ runner.os }}- + + - name: Run tests + run: cargo test --all + + build: + name: Build and push image + runs-on: golang + needs: test + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + container: + image: docker:27-cli + volumes: + - /docker-certs/client:/docker-certs/client:ro + env: + DOCKER_HOST: tcp://localhost:2376 + DOCKER_TLS_VERIFY: "1" + DOCKER_CERT_PATH: /docker-certs/client + steps: + - name: Install node (required by JS-based actions) + run: apk add --no-cache nodejs git + + - uses: actions/checkout@v4 + + - name: Get short SHA + id: sha + run: | + SHORT_SHA=$(git rev-parse --short HEAD) + echo "short_sha=${SHORT_SHA}" >> $GITHUB_OUTPUT + + - name: Registry login + run: | + echo "${REGISTRY_PAT}" | docker login "${REGISTRY}" \ + --username rock --password-stdin + env: + REGISTRY_PAT: ${{ secrets.REGISTRY_PAT }} + + - name: Build + run: | + docker build \ + -t "${IMAGE}:${{ steps.sha.outputs.short_sha }}" \ + -t "${IMAGE}:latest" \ + . + + - name: Push + run: | + docker push "${IMAGE}:${{ steps.sha.outputs.short_sha }}" + docker push "${IMAGE}:latest"