Skip to content

Commit a4c20a8

Browse files
authored
Create main.yml
rpm build service
1 parent 99f47b9 commit a4c20a8

File tree

1 file changed

+157
-0
lines changed

1 file changed

+157
-0
lines changed

.github/workflows/main.yml

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
name: Build Fedora RPM
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
release:
8+
types: [created, published]
9+
workflow_dispatch:
10+
11+
permissions:
12+
contents: write
13+
14+
jobs:
15+
build-rpm:
16+
runs-on: ubuntu-latest
17+
container:
18+
image: fedora:42
19+
steps:
20+
- uses: actions/checkout@v4
21+
22+
- name: Get version from tag
23+
id: get_version
24+
run: |
25+
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
26+
VERSION=${GITHUB_REF#refs/tags/v}
27+
RELEASE="1"
28+
elif [[ "${{ github.event.release.tag_name }}" != "" ]]; then
29+
VERSION=$(echo "${{ github.event.release.tag_name }}" | sed 's/^v//')
30+
RELEASE="1"
31+
else
32+
VERSION="1.0.0"
33+
RELEASE="0.dev"
34+
fi
35+
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
36+
echo "RELEASE=$RELEASE" >> $GITHUB_OUTPUT
37+
echo "Building version: $VERSION-$RELEASE"
38+
39+
- name: Install build tools
40+
run: |
41+
dnf install -y rpm-build rpmdevtools
42+
43+
- name: Setup RPM build tree
44+
run: |
45+
rpmdev-setuptree
46+
47+
- name: Create spec file
48+
run: |
49+
cat > ~/rpmbuild/SPECS/gpumode.spec << EOF
50+
Name: gpumode
51+
Version: ${{ steps.get_version.outputs.VERSION }}
52+
Release: ${{ steps.get_version.outputs.RELEASE }}%{?dist}
53+
Summary: Manual GPU switching and automatic power profile management
54+
License: GPL-3.0-or-later
55+
URL: https://github.com/FrameworkComputer/GPUMode-Fedora
56+
Source0: %{name}-%{version}.tar.gz
57+
BuildArch: noarch
58+
59+
Requires: python3 python3-gobject gtk3 libappindicator-gtk3 libnotify tuned udev polkit
60+
61+
%description
62+
System tray application for manual GPU mode switching on NVIDIA Optimus
63+
laptops with automatic TuneD power profile adjustment for Fedora.
64+
65+
%prep
66+
%autosetup
67+
68+
%build
69+
# Nothing to build
70+
71+
%install
72+
install -Dm755 GPUMode.py %{buildroot}/usr/bin/gpumode
73+
install -Dm755 power-profile-manager.py %{buildroot}/usr/bin/power-profile-manager
74+
install -Dm644 power-profile-manager.service %{buildroot}/usr/lib/systemd/system/power-profile-manager.service
75+
install -Dm644 99-power-profile-manager.rules %{buildroot}/etc/udev/rules.d/99-power-profile-manager.rules
76+
install -Dm644 50-envycontrol.rules %{buildroot}/etc/polkit-1/rules.d/50-envycontrol.rules
77+
78+
%post
79+
systemctl daemon-reload
80+
systemctl enable power-profile-manager.service
81+
systemctl start power-profile-manager.service
82+
udevadm control --reload-rules
83+
udevadm trigger --subsystem-match=power_supply
84+
systemctl restart polkit
85+
86+
for user_home in /home/*; do
87+
if [ -d "\$user_home" ]; then
88+
user=\$(basename "\$user_home")
89+
autostart_dir="\$user_home/.config/autostart"
90+
sudo -u "\$user" mkdir -p "\$autostart_dir" 2>/dev/null || mkdir -p "\$autostart_dir"
91+
cat > "\$autostart_dir/gpumode.desktop" << 'DESKTOPEOF'
92+
[Desktop Entry]
93+
Type=Application
94+
Name=GPUMode
95+
Comment=Manual GPU mode switching
96+
Exec=/usr/bin/gpumode
97+
Icon=video-display
98+
Terminal=false
99+
Categories=System;
100+
X-GNOME-Autostart-enabled=true
101+
DESKTOPEOF
102+
chown "\$user":"\$user" "\$autostart_dir/gpumode.desktop" 2>/dev/null || true
103+
fi
104+
done
105+
106+
%preun
107+
systemctl stop power-profile-manager.service 2>/dev/null || true
108+
systemctl disable power-profile-manager.service 2>/dev/null || true
109+
pkill -f "python3.*gpumode" 2>/dev/null || true
110+
111+
for user_home in /home/*; do
112+
rm -f "\$user_home/.config/autostart/gpumode.desktop" 2>/dev/null || true
113+
done
114+
115+
%files
116+
/usr/bin/gpumode
117+
/usr/bin/power-profile-manager
118+
/usr/lib/systemd/system/power-profile-manager.service
119+
/etc/udev/rules.d/99-power-profile-manager.rules
120+
/etc/polkit-1/rules.d/50-envycontrol.rules
121+
122+
%changelog
123+
* Fri Jan 03 2025 Matt Hartley <[email protected]> - ${{ steps.get_version.outputs.VERSION }}-${{ steps.get_version.outputs.RELEASE }}
124+
- Release ${{ steps.get_version.outputs.VERSION }}
125+
EOF
126+
127+
- name: Create source tarball
128+
run: |
129+
mkdir -p gpumode-${{ steps.get_version.outputs.VERSION }}
130+
cp GPUMode.py gpumode-${{ steps.get_version.outputs.VERSION }}/
131+
cp power-profile-manager.py gpumode-${{ steps.get_version.outputs.VERSION }}/
132+
cp power-profile-manager.service gpumode-${{ steps.get_version.outputs.VERSION }}/
133+
cp 99-power-profile-manager.rules gpumode-${{ steps.get_version.outputs.VERSION }}/
134+
cp 50-envycontrol.rules gpumode-${{ steps.get_version.outputs.VERSION }}/
135+
tar czf ~/rpmbuild/SOURCES/gpumode-${{ steps.get_version.outputs.VERSION }}.tar.gz gpumode-${{ steps.get_version.outputs.VERSION }}
136+
137+
- name: Build RPM
138+
run: |
139+
rpmbuild -ba ~/rpmbuild/SPECS/gpumode.spec
140+
141+
- name: Copy RPM to workspace
142+
run: |
143+
cp ~/rpmbuild/RPMS/noarch/*.rpm .
144+
145+
- name: Upload RPM artifact
146+
uses: actions/upload-artifact@v4
147+
with:
148+
name: gpumode-fedora-rpm
149+
path: '*.rpm'
150+
151+
- name: Upload to release
152+
if: github.event_name == 'release'
153+
uses: softprops/action-gh-release@v2
154+
with:
155+
files: '*.rpm'
156+
env:
157+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)