name: Build & Publish on: push: tags: ["v*"] workflow_dispatch: {} jobs: build_publish: runs-on: ubuntu-latest steps: - name: Install deps (Ubuntu) run: | sudo apt-get update sudo apt-get install -y \ build-essential git ca-certificates curl tar gzip \ rustc cargo - name: Checkout uses: actions/checkout@v4 - name: Read package name id: pkg_meta shell: bash run: | set -e PKG_NAME="$(sed -n 's/^name = \"\\(.*\\)\"/\\1/p' Cargo.toml | head -n 1)" if [ -z "$PKG_NAME" ]; then echo "Could not read package name from Cargo.toml" exit 1 fi echo "pkg_name=$PKG_NAME" >> "$GITHUB_OUTPUT" - name: Create source tarball (code) shell: bash run: | set -e FULL="${GITHUB_REPOSITORY:-}" if [ -z "$FULL" ]; then echo "GITHUB_REPOSITORY is empty. Set it in runner env or switch to explicit OWNER/REPO vars." exit 1 fi OWNER="${FULL%%/*}" REPO="${FULL##*/}" VERSION="${GITHUB_REF_NAME#v}" PKG_VERSION="${VERSION}" mkdir -p dist # Clean source snapshot of the repository at current commit git archive --format=tar.gz \ --prefix="${REPO}-${PKG_VERSION}/" \ -o "dist/${REPO}-${PKG_VERSION}-source.tar.gz" \ HEAD ls -lh dist # OPTIONAL: build binary and package it too - name: Build (release) shell: bash run: | set -e cargo build --release - name: Collect binary shell: bash run: | set -e FULL="${GITHUB_REPOSITORY:-}" if [ -z "$FULL" ]; then echo "GITHUB_REPOSITORY is empty. Set it in runner env or switch to explicit OWNER/REPO vars." exit 1 fi REPO="${FULL##*/}" VERSION="${GITHUB_REF_NAME#v}" PKG_VERSION="${VERSION}" BIN_NAME="${{ steps.pkg_meta.outputs.pkg_name }}" mkdir -p dist cp "target/release/${BIN_NAME}" "dist/${REPO}-${PKG_VERSION}-linux-x86_64" chmod +x "dist/${REPO}-${PKG_VERSION}-linux-x86_64" ls -lh dist - name: Upload to Gitea Generic Packages shell: bash env: GITEA_BASE_URL: ${{ vars.GITEA_BASE_URL }} GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | set -e FULL="${GITHUB_REPOSITORY:-}" if [ -z "$FULL" ]; then echo "GITHUB_REPOSITORY is empty. Set it in runner env or switch to explicit OWNER/REPO vars." exit 1 fi OWNER="${FULL%%/*}" REPO="${FULL##*/}" VERSION="${GITHUB_REF_NAME#v}" PKG_VERSION="${VERSION}" if [ -z "${GITEA_BASE_URL:-}" ]; then echo "Missing vars.GITEA_BASE_URL (example: https://gitea.example.com)" exit 1 fi if [ -z "${GITEA_TOKEN:-}" ]; then echo "Missing secrets.GITEA_TOKEN" exit 1 fi # Choose a package name (keep stable). Here: repo name. PACKAGE_NAME="$REPO" for FILE in dist/*; do FILENAME="$(basename "$FILE")" URL="${GITEA_BASE_URL}/api/packages/${OWNER}/generic/${PACKAGE_NAME}/${PKG_VERSION}/${FILENAME}" echo "Uploading $FILENAME -> $URL" curl -fsS -X PUT \ -H "Authorization: token ${GITEA_TOKEN}" \ --upload-file "$FILE" \ "$URL" done