name: release "on": push: tags: - "v*.*.*" workflow_dispatch: permissions: contents: write jobs: verify: runs-on: [self-hosted, linux, arch, homelab] steps: - name: Checkout repository uses: actions/checkout@v4 - name: Check formatting shell: bash run: cargo fmt --check - name: Run tests shell: bash run: cargo test --locked - name: Run clippy shell: bash run: cargo clippy --locked -- -D warnings - name: Lint YAML shell: bash run: | docker run --rm \ -v "$PWD:/work" \ -w /work \ cytopia/yamllint:latest \ -c .yamllint . linux-amd64: needs: verify runs-on: [self-hosted, linux, arch, homelab] env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Build release binary shell: bash run: cargo build --release --locked - name: Package artifact shell: bash run: | tag="${GITHUB_REF##*/}" version="${tag#v}" mkdir -p dist binary="gosleep-timer-${version}-linux-amd64" cp target/release/gosleep-timer "dist/${binary}" sha256sum "dist/${binary}" > "dist/${binary}.sha256" - name: Create Gitea release id: release shell: bash run: | tag="${GITHUB_REF##*/}" release_url="https://gitea.forust.xyz/api/v1/repos/forust/gosleep/releases" existing="$(curl -fsS \ "${release_url}/tags/${tag}" \ -H "Authorization: token ${GITEA_TOKEN}" || true)" release_id="$(printf '%s' "$existing" | jq -r '.id // empty')" if [ -z "$release_id" ]; then body="$(cat <> "$GITHUB_OUTPUT" - name: Upload Gitea release assets shell: bash run: | release_url="https://gitea.forust.xyz/api/v1/repos/forust/gosleep/releases" release_id="${{ steps.release.outputs.release_id }}" for asset in dist/gosleep-timer-* dist/gosleep-timer-*.sha256; do name="$(basename "$asset")" release="$(curl -fsS \ "${release_url}/${release_id}" \ -H "Authorization: token ${GITEA_TOKEN}")" asset_id="$(printf '%s' "$release" | jq -r --arg name "$name" '.assets[]? | select(.name == $name) | .id' | head -n 1)" if [ -n "$asset_id" ]; then curl -fsS \ -X DELETE "${release_url}/${release_id}/assets/${asset_id}" \ -H "Authorization: token ${GITEA_TOKEN}" fi curl -fsS \ -X POST "${release_url}/${release_id}/assets?name=${name}" \ -H "Authorization: token ${GITEA_TOKEN}" \ -F "attachment=@${asset}" done - name: Upload artifact uses: actions/upload-artifact@v3 with: name: gosleep-timer-linux-amd64 path: dist/*