name: Release on: push: tags: - 'v*' jobs: release: runs-on: ubuntu-latest container: image: rust:bookworm volumes: - /opt/runner/keys:/keys:ro steps: - name: Install tools run: | apt-get update apt-get install -y dpkg-dev git curl openssh-client cargo install cargo-deb - name: Setup SSH run: | test -r /keys/forgejo_runner || { echo "Deploy key /keys/forgejo_runner chybi"; exit 1; } install -m 600 /keys/forgejo_runner /tmp/forgejo_runner echo "GIT_SSH_COMMAND=ssh -p 554 -i /tmp/forgejo_runner -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR" >> "$GITHUB_ENV" - name: Checkout source run: | git clone ssh://git@git-ssh.janvete.com:554/seth/resticview.git src cd src git checkout "${{ github.ref_name }}" - name: Build Linux release binary and .deb working-directory: src run: | VERSION=${{ github.ref_name }} mkdir -p dist cargo deb ls -la target/debian/ file target/debian/*.deb dpkg-deb -I target/debian/*.deb cp target/debian/*.deb dist/ STAGING=$(mktemp -d) cp target/release/resticview "${STAGING}/resticview" tar -czf "dist/resticview-${VERSION}-linux-amd64.tar.gz" -C "${STAGING}" resticview rm -rf "${STAGING}" - name: Print checksums working-directory: src run: | echo "=== SHA256 checksums ===" sha256sum dist/* - name: Create Forgejo Release working-directory: src env: FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} FORGEJO_URL: https://git.janvete.com run: | VERSION=${{ github.ref_name }} API="${FORGEJO_URL}/api/v1/repos/seth/resticview" RELEASE_JSON=$(curl -sS -H "Authorization: token ${FORGEJO_TOKEN}" \ -H "Content-Type: application/json" \ -X POST \ -d "{\"tag_name\":\"${VERSION}\",\"name\":\"${VERSION}\",\"draft\":false,\"prerelease\":false}" \ "${API}/releases") echo "Create release response: ${RELEASE_JSON}" RELEASE_ID=$(echo "${RELEASE_JSON}" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) if [ -z "${RELEASE_ID}" ]; then echo "Release may already exist, fetching existing release..." EXISTING=$(curl -sS -H "Authorization: token ${FORGEJO_TOKEN}" \ "${API}/releases/tags/${VERSION}") echo "Existing release response: ${EXISTING}" RELEASE_ID=$(echo "${EXISTING}" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) fi if [ -z "${RELEASE_ID}" ]; then echo "Failed to create or fetch release" exit 1 fi for ARCHIVE in dist/*; do [ -e "${ARCHIVE}" ] || continue NAME=$(basename "${ARCHIVE}") case "${NAME}" in *.tar.gz) CONTENT_TYPE="application/gzip" ;; *.deb) CONTENT_TYPE="application/vnd.debian.binary-package" ;; *) CONTENT_TYPE="application/octet-stream" ;; esac curl -sS -H "Authorization: token ${FORGEJO_TOKEN}" \ -H "Content-Type: ${CONTENT_TYPE}" \ --data-binary "@${ARCHIVE}" \ "${API}/releases/${RELEASE_ID}/assets?name=${NAME}" echo "Uploaded ${NAME}" done - name: Update APT repository working-directory: src run: | VERSION=${{ github.ref_name }} git clone ssh://git@git-ssh.janvete.com:554/seth/apt.git apt-repo cp dist/*.deb apt-repo/ cd apt-repo dpkg-scanpackages . > Packages gzip -k -f Packages cat > Release << RELEASE Origin: janvete Label: janvete Suite: stable Codename: stable Version: 1.0 Architectures: amd64 Components: main Description: janvete tools APT repository Date: $(date -Ru) RELEASE { echo "SHA256:" for f in Packages Packages.gz *.deb; do [ -e "$f" ] || continue printf " %s %16d %s\n" "$(sha256sum "$f" | cut -d' ' -f1)" "$(stat -c%s "$f")" "$f" done } >> Release git config user.email "forgejo-actions[bot]@janvete.com" git config user.name "forgejo-actions[bot]" git add -A git commit -m "chore: add resticview ${VERSION}" git push