Build Packages and Create Release #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build Packages and Create Release | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Release version (e.g., 1.0.0)' | |
| required: true | |
| type: string | |
| prerelease: | |
| description: 'Mark as pre-release' | |
| required: false | |
| type: boolean | |
| default: false | |
| permissions: | |
| contents: write | |
| jobs: | |
| build-rpm: | |
| runs-on: ubuntu-latest | |
| container: | |
| image: fedora:latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Install RPM build tools | |
| run: | | |
| dnf install -y rpm-build rpmdevtools python3-devel python3-setuptools python3-gobject gtk4 polkit git | |
| - name: Setup RPM build tree | |
| run: | | |
| rpmdev-setuptree | |
| - name: Update version in spec file | |
| run: | | |
| sed -i 's/^%define version .*/%define version ${{ inputs.version }}/' tasker.spec | |
| sed -i "s/version=\".*\"/version=\"${{ inputs.version }}\"/" setup.py | |
| - name: Create source tarball | |
| run: | | |
| mkdir -p /tmp/tasker-${{ inputs.version }} | |
| cp -r *.py *.css *.desktop *.spec *.png setup.py README.md LICENSE /tmp/tasker-${{ inputs.version }}/ | |
| cd /tmp && tar czf tasker-${{ inputs.version }}.tar.gz tasker-${{ inputs.version }} | |
| cp /tmp/tasker-${{ inputs.version }}.tar.gz ~/rpmbuild/SOURCES/ | |
| - name: Copy spec file | |
| run: | | |
| cp tasker.spec ~/rpmbuild/SPECS/ | |
| - name: Build RPM | |
| run: | | |
| rpmbuild -ba ~/rpmbuild/SPECS/tasker.spec | |
| - name: Find built RPM | |
| id: find_rpm | |
| run: | | |
| RPM_FILE=$(find ~/rpmbuild/RPMS -name "*.rpm" -type f | head -n 1) | |
| SRPM_FILE=$(find ~/rpmbuild/SRPMS -name "*.rpm" -type f | head -n 1) | |
| echo "rpm_path=$RPM_FILE" >> $GITHUB_OUTPUT | |
| echo "srpm_path=$SRPM_FILE" >> $GITHUB_OUTPUT | |
| echo "rpm_name=$(basename $RPM_FILE)" >> $GITHUB_OUTPUT | |
| echo "srpm_name=$(basename $SRPM_FILE)" >> $GITHUB_OUTPUT | |
| - name: Upload RPM artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: rpm-packages | |
| path: | | |
| ~/rpmbuild/RPMS/**/*.rpm | |
| ~/rpmbuild/SRPMS/*.rpm | |
| retention-days: 1 | |
| # Ubuntu/Debian build is currently disabled due to styling issues with GTK4 | |
| # build-deb: | |
| # runs-on: ubuntu-24.04 | |
| # | |
| # steps: | |
| # - name: Checkout code | |
| # uses: actions/checkout@v4 | |
| # | |
| # - name: Set up Python | |
| # uses: actions/setup-python@v5 | |
| # with: | |
| # python-version: '3.12' | |
| # | |
| # - name: Install build dependencies | |
| # run: | | |
| # sudo apt-get update | |
| # sudo apt-get install -y \ | |
| # build-essential \ | |
| # devscripts \ | |
| # debhelper \ | |
| # dh-python \ | |
| # python3-all \ | |
| # python3-setuptools \ | |
| # python3-pip \ | |
| # python3-gi \ | |
| # gir1.2-gtk-4.0 \ | |
| # policykit-1 | |
| # | |
| # # Ensure setuptools is available for the build | |
| # pip3 install --break-system-packages setuptools wheel | |
| # | |
| # - name: Update version in files | |
| # run: | | |
| # # Update setup.py | |
| # sed -i "s/version=\".*\"/version=\"${{ inputs.version }}\"/" setup.py | |
| # | |
| # # Update changelog with new version | |
| # DEBFULLNAME="Anas Arbaoui" \ | |
| # DEBEMAIL="anas@arbaoui.me" \ | |
| # dch --newversion "${{ inputs.version }}-1" \ | |
| # --distribution "noble" \ | |
| # "Release version ${{ inputs.version }}" | |
| # | |
| # - name: Build DEB package | |
| # run: | | |
| # dpkg-buildpackage -us -uc -b | |
| # | |
| # - name: Collect DEB packages | |
| # run: | | |
| # mkdir -p deb-output | |
| # find .. -maxdepth 1 -name "*.deb" -type f -exec cp {} deb-output/ \; | |
| # find .. -maxdepth 1 -name "*.changes" -type f -exec cp {} deb-output/ \; | |
| # find .. -maxdepth 1 -name "*.buildinfo" -type f -exec cp {} deb-output/ \; | |
| # | |
| # - name: Upload DEB artifacts | |
| # uses: actions/upload-artifact@v4 | |
| # with: | |
| # name: deb-packages | |
| # path: deb-output/ | |
| # retention-days: 1 | |
| create-release: | |
| needs: [build-rpm] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download RPM artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: rpm-packages | |
| path: ./rpm-packages | |
| # - name: Download DEB artifacts | |
| # uses: actions/download-artifact@v4 | |
| # with: | |
| # name: deb-packages | |
| # path: ./deb-packages | |
| - name: Find package files | |
| id: find_packages | |
| run: | | |
| RPM_FILE=$(find ./rpm-packages -name "tasker-*.noarch.rpm" -type f | head -n 1) | |
| SRPM_FILE=$(find ./rpm-packages -name "tasker-*.src.rpm" -type f | head -n 1) | |
| # DEB_FILE=$(find ./deb-packages -name "tasker_*.deb" -type f | head -n 1) | |
| echo "rpm_path=$RPM_FILE" >> $GITHUB_OUTPUT | |
| echo "srpm_path=$SRPM_FILE" >> $GITHUB_OUTPUT | |
| # echo "deb_path=$DEB_FILE" >> $GITHUB_OUTPUT | |
| echo "rpm_name=$(basename $RPM_FILE)" >> $GITHUB_OUTPUT | |
| echo "srpm_name=$(basename $SRPM_FILE)" >> $GITHUB_OUTPUT | |
| # echo "deb_name=$(basename $DEB_FILE)" >> $GITHUB_OUTPUT | |
| - name: Create Release | |
| id: create_release | |
| uses: actions/create-release@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tag_name: v${{ inputs.version }} | |
| release_name: Release v${{ inputs.version }} | |
| body: | | |
| ## Tasker v${{ inputs.version }} | |
| A simple GTK4 GUI for managing cron jobs on Linux. | |
| ### Installation | |
| #### Fedora/RHEL/CentOS/Rocky/AlmaLinux | |
| ```bash | |
| # Download the RPM | |
| wget https://github.com/${{ github.repository }}/releases/download/v${{ inputs.version }}/${{ steps.find_packages.outputs.rpm_name }} | |
| # Install | |
| sudo dnf install ./${{ steps.find_packages.outputs.rpm_name }} | |
| ``` | |
| ### Changes | |
| - Release version ${{ inputs.version }} | |
| ### Requirements | |
| - Python 3.10 or later | |
| - GTK4 | |
| - PyGObject 3.42.0 or later | |
| ### Package Files | |
| - **${{ steps.find_packages.outputs.rpm_name }}**: Binary RPM for Fedora/RHEL-based distributions | |
| - **${{ steps.find_packages.outputs.srpm_name }}**: Source RPM package | |
| draft: false | |
| prerelease: ${{ inputs.prerelease }} | |
| - name: Upload RPM to Release | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ${{ steps.find_packages.outputs.rpm_path }} | |
| asset_name: ${{ steps.find_packages.outputs.rpm_name }} | |
| asset_content_type: application/x-rpm | |
| - name: Upload SRPM to Release | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ${{ steps.find_packages.outputs.srpm_path }} | |
| asset_name: ${{ steps.find_packages.outputs.srpm_name }} | |
| asset_content_type: application/x-rpm | |
| # - name: Upload DEB to Release | |
| # uses: actions/upload-release-asset@v1 | |
| # env: | |
| # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # with: | |
| # upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| # asset_path: ${{ steps.find_packages.outputs.deb_path }} | |
| # asset_name: ${{ steps.find_packages.outputs.deb_name }} | |
| # asset_content_type: application/vnd.debian.binary-package | |
| - name: Upload all artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: all-packages | |
| path: | | |
| ./rpm-packages/** | |
| retention-days: 30 |