Skip to content

Build Packages and Create Release #1

Build Packages and Create Release

Build Packages and Create Release #1

Workflow file for this run

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