name: Release on: push: branches: - main tags: - 'v*' jobs: build: name: Build and Release runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: toolchain: stable cache: false - name: Install packaging tools run: apt-get update && apt-get install -y dpkg-dev - name: Get Version id: get_version run: | VERSION=$(grep -m1 '^version =' stitch-peek/Cargo.toml | cut -d '"' -f 2) echo "VERSION=$VERSION" >> $GITHUB_OUTPUT if [[ "${{ github.ref }}" == refs/tags/v* ]]; then echo "TAG=${{ github.ref_name }}" >> $GITHUB_OUTPUT else echo "TAG=v$VERSION" >> $GITHUB_OUTPUT fi - name: Check if Release Exists id: check_release shell: bash run: | HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/releases/tags/${{ steps.get_version.outputs.TAG }}") if [ "$HTTP_STATUS" = "200" ]; then echo "EXISTS=true" >> $GITHUB_OUTPUT echo "Release already exists for tag ${{ steps.get_version.outputs.TAG }}. Skipping." else echo "EXISTS=false" >> $GITHUB_OUTPUT fi - name: Build if: steps.check_release.outputs.EXISTS == 'false' run: cargo build --release -p stitch-peek - name: Test if: steps.check_release.outputs.EXISTS == 'false' run: cargo test - name: Package .deb if: steps.check_release.outputs.EXISTS == 'false' env: VERSION: ${{ steps.get_version.outputs.VERSION }} TAG: ${{ steps.get_version.outputs.TAG }} run: | PKG="stitch-peek_${VERSION}_amd64" mkdir -p "${PKG}/DEBIAN" mkdir -p "${PKG}/usr/bin" mkdir -p "${PKG}/usr/share/thumbnailers" mkdir -p "${PKG}/usr/share/mime/packages" cp target/release/stitch-peek "${PKG}/usr/bin/" strip "${PKG}/usr/bin/stitch-peek" cp data/stitch-peek.thumbnailer "${PKG}/usr/share/thumbnailers/" cp data/pes.xml "${PKG}/usr/share/mime/packages/" printf '%s\n' \ "Package: stitch-peek" \ "Version: ${VERSION}" \ "Section: graphics" \ "Priority: optional" \ "Architecture: amd64" \ "Depends: shared-mime-info" \ "Maintainer: stitch-peek contributors" \ "Description: Nautilus thumbnail generator for PES embroidery files" \ " stitch-peek generates thumbnails for Brother PES embroidery files," \ " allowing GNOME/Nautilus to display preview images in the file manager." \ > "${PKG}/DEBIAN/control" printf '#!/bin/sh\nset -e\nif command -v update-mime-database >/dev/null 2>&1; then\n update-mime-database /usr/share/mime\nfi\n' \ > "${PKG}/DEBIAN/postinst" chmod 755 "${PKG}/DEBIAN/postinst" cp "${PKG}/DEBIAN/postinst" "${PKG}/DEBIAN/postrm" chmod 755 "${PKG}/DEBIAN/postrm" dpkg-deb --build "${PKG}" mv "${PKG}.deb" "stitch-peek-${TAG}-amd64.deb" echo "Built: stitch-peek-${TAG}-amd64.deb" - name: Create Release and Upload Asset if: steps.check_release.outputs.EXISTS == 'false' uses: https://github.com/softprops/action-gh-release@v1 with: tag_name: ${{ steps.get_version.outputs.TAG }} name: Release ${{ steps.get_version.outputs.TAG }} body: | Automated release for version ${{ steps.get_version.outputs.VERSION }} Commit: ${{ github.sha }} Branch: ${{ github.ref_name }} files: stitch-peek-${{ steps.get_version.outputs.TAG }}-amd64.deb draft: false prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}