diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 5ed9c3f..2234085 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -4,6 +4,8 @@ on: push: branches: - main + tags: + - 'v*' pull_request: jobs: @@ -21,3 +23,129 @@ jobs: - name: Build client run: cargo build -p client + + release: + if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install packaging tools + run: | + cargo install cargo-deb --locked + cargo install cargo-rpm --locked + + - name: Build release binaries + run: cargo build --release -p relay -p client + + - name: Resolve version + id: version + run: | + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION="${GITHUB_REF#refs/tags/}" + IS_PRERELEASE=false + else + VERSION="main-${GITHUB_SHA:0:7}" + IS_PRERELEASE=true + fi + echo "version=${VERSION}" >> "$GITHUB_OUTPUT" + echo "is_prerelease=${IS_PRERELEASE}" >> "$GITHUB_OUTPUT" + + - name: Package tarball + run: | + mkdir -p dist + cp target/release/relay dist/ + cp target/release/client dist/ + tar -czf "dist/play-dvv-${{ steps.version.outputs.version }}-linux-x86_64.tar.gz" -C dist relay client + + - name: Build deb packages + run: | + cargo deb -p relay --no-build + cargo deb -p client --no-build + mkdir -p dist + cp target/debian/*.deb dist/ + + - name: Build rpm packages + run: | + cargo rpm build -p relay --release + cargo rpm build -p client --release + mkdir -p dist + find target/release/rpmbuild/RPMS -name "*.rpm" -exec cp {} dist/ \; + + - name: Publish generic packages + if: ${{ secrets.GITEA_TOKEN != '' }} + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + run: | + OWNER="${GITHUB_REPOSITORY%/*}" + REPO="${GITHUB_REPOSITORY#*/}" + VERSION="${{ steps.version.outputs.version }}" + for file in dist/*; do + name=$(basename "$file") + curl -sSf -X PUT \ + -H "Authorization: token ${GITEA_TOKEN}" \ + --upload-file "$file" \ + "${GITHUB_SERVER_URL}/api/packages/${OWNER}/generic/${REPO}/${VERSION}/${name}" + done + + - name: Build and push OCI images + if: ${{ secrets.GITEA_TOKEN != '' && secrets.GITEA_USERNAME != '' }} + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + GITEA_USERNAME: ${{ secrets.GITEA_USERNAME }} + run: | + VERSION="${{ steps.version.outputs.version }}" + echo "${GITEA_TOKEN}" | docker login git.dvv.one -u "${GITEA_USERNAME}" --password-stdin + + cat > Dockerfile.relay <<'DOCKER' + FROM debian:bookworm-slim + COPY target/release/relay /usr/local/bin/relay + EXPOSE 7000 7001 25565 + ENTRYPOINT ["/usr/local/bin/relay"] +DOCKER + + cat > Dockerfile.client <<'DOCKER' + FROM debian:bookworm-slim + COPY target/release/client /usr/local/bin/client + ENTRYPOINT ["/usr/local/bin/client"] +DOCKER + + docker build -f Dockerfile.relay -t git.dvv.one/${GITHUB_REPOSITORY,,}/relay:${VERSION} . + docker build -f Dockerfile.client -t git.dvv.one/${GITHUB_REPOSITORY,,}/client:${VERSION} . + + if [[ "${GITHUB_REF}" == "refs/heads/main" ]]; then + docker tag git.dvv.one/${GITHUB_REPOSITORY,,}/relay:${VERSION} git.dvv.one/${GITHUB_REPOSITORY,,}/relay:main + docker tag git.dvv.one/${GITHUB_REPOSITORY,,}/client:${VERSION} git.dvv.one/${GITHUB_REPOSITORY,,}/client:main + fi + + docker push git.dvv.one/${GITHUB_REPOSITORY,,}/relay:${VERSION} + docker push git.dvv.one/${GITHUB_REPOSITORY,,}/client:${VERSION} + if [[ "${GITHUB_REF}" == "refs/heads/main" ]]; then + docker push git.dvv.one/${GITHUB_REPOSITORY,,}/relay:main + docker push git.dvv.one/${GITHUB_REPOSITORY,,}/client:main + fi + + - name: Publish Cargo packages + if: ${{ startsWith(github.ref, 'refs/tags/') && secrets.GITEA_TOKEN != '' }} + env: + CARGO_REGISTRIES_GITEA_INDEX: sparse+https://git.dvv.one/api/packages/${{ github.repository_owner }}/cargo/ + CARGO_REGISTRIES_GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + run: | + cargo publish -p relay --registry gitea + cargo publish -p client --registry gitea + + - name: Create release + if: ${{ secrets.GITEA_TOKEN != '' }} + uses: gitea.com/actions/release-action@v1 + with: + token: ${{ secrets.GITEA_TOKEN }} + tag_name: ${{ steps.version.outputs.version }} + name: ${{ steps.version.outputs.version }} + prerelease: ${{ steps.version.outputs.is_prerelease }} + body: | + Automated release for ${{ steps.version.outputs.version }}. + files: dist/* diff --git a/client/Cargo.toml b/client/Cargo.toml index 13f362a..00ac025 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -2,6 +2,23 @@ name = "client" version = "0.1.0" edition = "2024" +description = "Play-DVV client" +license = "MIT" +authors = ["Play-DVV Team "] + +[package.metadata.deb] +maintainer = "Play-DVV Team " +section = "net" +priority = "optional" +assets = [ + ["target/release/client", "usr/bin/client", "755"] +] + +[package.metadata.rpm] +package = "client" +assets = [ + { source = "target/release/client", dest = "/usr/bin/client", mode = "755" } +] [dependencies] anyhow.workspace = true diff --git a/relay/Cargo.toml b/relay/Cargo.toml index eb9b0bd..d092872 100644 --- a/relay/Cargo.toml +++ b/relay/Cargo.toml @@ -2,6 +2,23 @@ name = "relay" version = "0.1.0" edition = "2024" +description = "Play-DVV relay server" +license = "MIT" +authors = ["Play-DVV Team "] + +[package.metadata.deb] +maintainer = "Play-DVV Team " +section = "net" +priority = "optional" +assets = [ + ["target/release/relay", "usr/bin/relay", "755"] +] + +[package.metadata.rpm] +package = "relay" +assets = [ + { source = "target/release/relay", dest = "/usr/bin/relay", mode = "755" } +] [dependencies] anyhow.workspace = true