diff --git a/.gitea/workflows/code-build.yml b/.gitea/workflows/code-build.yml new file mode 100644 index 0000000..f8a14fe --- /dev/null +++ b/.gitea/workflows/code-build.yml @@ -0,0 +1,186 @@ +name: Build Check - AppImage, Arch, Fedora + +on: + workflow_dispatch: + pull_request: + paths: + - 'build-aux/**' + +env: + PKGDEST: "/tmp/portprotonqt" + PACKAGE: "portprotonqt" + +jobs: + changes: + runs-on: ubuntu-latest + outputs: + appimage: ${{ steps.check.outputs.appimage }} + fedora: ${{ steps.check.outputs.fedora }} + arch: ${{ steps.check.outputs.arch }} + steps: + - uses: https://gitea.com/actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Ensure git is installed + run: | + sudo apt update + sudo apt install -y git + + - name: Check changed files + id: check + run: | + # Get changed files + git diff --name-only ${{ github.event.pull_request.base.sha }}...${{ github.event.pull_request.head.sha }} > changed_files.txt + + echo "Changed files:" + cat changed_files.txt + + # Check AppImage files + if grep -q "build-aux/AppImageBuilder.yml" changed_files.txt; then + echo "appimage=true" >> $GITHUB_OUTPUT + else + echo "appimage=false" >> $GITHUB_OUTPUT + fi + + # Check Fedora spec files (only fedora-git.spec) + if grep -q "build-aux/fedora-git.spec" changed_files.txt; then + echo "fedora=true" >> $GITHUB_OUTPUT + else + echo "fedora=false" >> $GITHUB_OUTPUT + fi + + # Check Arch PKGBUILD-git + if grep -q "build-aux/PKGBUILD-git" changed_files.txt; then + echo "arch=true" >> $GITHUB_OUTPUT + else + echo "arch=false" >> $GITHUB_OUTPUT + fi + + build-appimage: + name: Build AppImage + runs-on: ubuntu-22.04 + needs: changes + if: needs.changes.outputs.appimage == 'true' || github.event_name == 'workflow_dispatch' + steps: + - uses: https://gitea.com/actions/checkout@v4 + + - name: Install required dependencies + run: | + sudo apt update + sudo apt install -y binutils coreutils desktop-file-utils gtk-update-icon-cache fakeroot fuse libgdk-pixbuf2.0-dev patchelf python3-pip python3-dev python3-setuptools squashfs-tools strace util-linux zsync + + - name: Install tools + run: pip3 install appimage-builder uv + + - name: Build AppImage + run: | + cd build-aux + sed -i '/app_info:/,/- exec:/ s/^(\s*version:\s*).*/\1"0"/' AppImageBuilder.yml + appimage-builder + + - name: Upload AppImage + uses: https://gitea.com/actions/gitea-upload-artifact@v4 + with: + name: PortProtonQt-AppImage + path: build-aux/PortProtonQt*.AppImage + + build-fedora: + name: Build Fedora RPM + runs-on: ubuntu-latest + needs: changes + if: needs.changes.outputs.fedora == 'true' || github.event_name == 'workflow_dispatch' + + strategy: + matrix: + fedora_version: [41, 42, rawhide] + + container: + image: fedora:${{ matrix.fedora_version }} + options: --privileged + + steps: + - name: Install build dependencies + run: | + dnf install -y git rpmdevtools python3-devel python3-wheel python3-pip \ + python3-build pyproject-rpm-macros python3-setuptools \ + redhat-rpm-config nodejs npm + + - name: Setup rpmbuild environment + run: | + useradd rpmbuild -u 5002 -g users || true + mkdir -p /home/rpmbuild/{BUILD,RPMS,SPECS,SRPMS,SOURCES} + chown -R rpmbuild:users /home/rpmbuild + echo '%_topdir /home/rpmbuild' > /home/rpmbuild/.rpmmacros + + - name: Checkout repo + uses: https://gitea.com/actions/checkout@v4 + + - name: Copy fedora-git.spec + run: | + cp build-aux/fedora-git.spec /home/rpmbuild/SPECS/${{ env.PACKAGE }}.spec + chown -R rpmbuild:users /home/rpmbuild + + - name: Build RPM + run: | + su rpmbuild -c "rpmbuild -ba /home/rpmbuild/SPECS/${{ env.PACKAGE }}.spec" + + - name: Upload RPM package + uses: https://gitea.com/actions/gitea-upload-artifact@v4 + with: + name: PortProtonQt-RPM-Fedora-${{ matrix.fedora_version }} + path: /home/rpmbuild/RPMS/**/*.rpm + + build-arch: + name: Build Arch Package + runs-on: ubuntu-22.04 + needs: changes + if: needs.changes.outputs.arch == 'true' || github.event_name == 'workflow_dispatch' + container: + image: archlinux:base-devel + volumes: + - /usr:/usr-host + - /opt:/opt-host + options: --privileged + + steps: + - name: Prepare container + run: | + pacman -Sy --noconfirm --disable-download-timeout --needed git wget gnupg nodejs npm + sed -i 's/#MAKEFLAGS="-j2"/MAKEFLAGS="-j$(nproc) -l$(nproc)"/g' /etc/makepkg.conf + sed -i 's/OPTIONS=(.*)/OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge lto)/g' /etc/makepkg.conf + yes | pacman -Scc + pacman-key --init + pacman -S --noconfirm archlinux-keyring + mkdir -p /__w/portproton-repo + pacman-key --recv-key 3056513887B78AEB --keyserver keyserver.ubuntu.com + pacman-key --lsign-key 3056513887B78AEB + pacman -U --noconfirm 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst' + pacman -U --noconfirm 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst' + cat << EOM >> /etc/pacman.conf + + [chaotic-aur] + Include = /etc/pacman.d/chaotic-mirrorlist + EOM + pacman -Syy + useradd -m user -G wheel && echo "user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers + echo "PACKAGER=\"Boris Yumankulov \"" >> /etc/makepkg.conf + chown user -R /tmp + chown user -R .. + + - name: Build + run: | + cd /__w/portproton-repo + git clone https://git.linux-gaming.ru/Boria138/PortProtonQt.git + cd /__w/portproton-repo/PortProtonQt/build-aux + chown user -R .. + su user -c "yes '' | makepkg --noconfirm -s -p PKGBUILD-git" + + - name: Checkout + uses: https://gitea.com/actions/checkout@v4 + + - name: Upload Arch package + uses: https://gitea.com/actions/gitea-upload-artifact@v4 + with: + name: PortProtonQt-Arch + path: ${{ env.PKGDEST }}/*