From 2dde9cff424353ff632baaa1cc9a421e36514c6c Mon Sep 17 00:00:00 2001 From: Kevin Yue Date: Sun, 3 Mar 2024 19:25:29 +0800 Subject: [PATCH] Improve the build script --- .github/workflows/build.yaml | 128 +----------------- Makefile | 23 +++- packaging/binary/Makefile.in | 1 + .../rpm/globalprotect-openconnect.spec.in | 5 +- 4 files changed, 30 insertions(+), 127 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index c4372fa..99db3ee 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -55,7 +55,7 @@ jobs: path: | source/gp/.build/tarball/*.tar.gz - build-deb: + build-gp: needs: - setup-matrix - tarball @@ -65,130 +65,17 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Prepare workspace - run: rm -rf build-deb && mkdir build-deb + run: rm -rf build-gp && mkdir build-gp - name: Download tarball uses: actions/download-artifact@v3 with: name: artifact-source - path: build-deb + path: build-gp - name: Docker Login run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin - - name: Build DEB package in Docker + - name: Build gp in Docker run: | - docker run --rm -v $(pwd)/build-deb:/deb yuezk/gpdev:deb-builder - - name: Install DEB package in Docker - run: | - docker run --rm -v $(pwd)/build-deb:/deb yuezk/gpdev:deb-builder \ - bash -c "sudo dpkg -i /deb/*.deb; gpclient --version; gpservice --version; gpauth --version; gpgui-helper --version;" - - name: Upload DEB package - uses: actions/upload-artifact@v3 - with: - name: artifact-deb-${{ matrix.os }} - if-no-files-found: error - path: | - build-deb/*.deb - - build-rpm: - needs: - - setup-matrix - - tarball - strategy: - matrix: - os: ${{fromJson(needs.setup-matrix.outputs.matrix)}} - runs-on: ${{ matrix.os }} - steps: - - name: Prepare workspace - run: rm -rf build-rpm && mkdir build-rpm - - name: Download tarball - uses: actions/download-artifact@v3 - with: - name: artifact-source - path: build-rpm - - name: Docker Login - run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin - - name: Build RPM package in Docker - run: | - docker run --rm -v $(pwd)/build-rpm:/rpm yuezk/gpdev:rpm-builder - - name: Install RPM package in Docker - run: | - docker run --rm -v $(pwd)/build-rpm:/rpm yuezk/gpdev:rpm-builder \ - bash -c "sudo rpm -i /rpm/*.$(uname -m).rpm; gpclient --version; gpservice --version; gpauth --version; gpgui-helper --version;" - - name: Upload RPM package - uses: actions/upload-artifact@v3 - with: - name: artifact-rpm-${{ matrix.os }} - if-no-files-found: error - path: | - build-rpm/*.rpm - - build-pkgbuild: - needs: - - setup-matrix - - tarball - strategy: - matrix: - os: ${{fromJson(needs.setup-matrix.outputs.matrix)}} - runs-on: ${{ matrix.os }} - steps: - - name: Prepare workspace - run: rm -rf build-pkgbuild && mkdir build-pkgbuild - - name: Download tarball - uses: actions/download-artifact@v3 - with: - name: artifact-source - path: build-pkgbuild - - name: Docker Login - run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin - - name: Build PKGBUILD package in Docker - run: | - docker run --rm -v $(pwd)/build-pkgbuild:/pkgbuild yuezk/gpdev:pkgbuild - - name: Install PKGBUILD package in Docker - run: | - docker run --rm -v $(pwd)/build-pkgbuild:/pkgbuild yuezk/gpdev:pkgbuild \ - bash -c "sudo pacman -U --noconfirm /pkgbuild/*.pkg.tar.zst; gpclient --version; gpservice --version; gpauth --version; gpgui-helper --version;" - - name: Upload PKGBUILD package - uses: actions/upload-artifact@v3 - with: - name: artifact-pkgbuild-${{ matrix.os }} - if-no-files-found: error - path: | - build-pkgbuild/*.pkg.tar.zst - - build-binary: - needs: - - setup-matrix - - tarball - strategy: - matrix: - os: ${{fromJson(needs.setup-matrix.outputs.matrix)}} - runs-on: ${{ matrix.os }} - steps: - - name: Prepare workspace - run: rm -rf build-binary && mkdir build-binary - - name: Download tarball - uses: actions/download-artifact@v3 - with: - name: artifact-source - path: build-binary - - name: Docker Login - run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin - - name: Build binary in Docker - run: | - docker run --rm -v $(pwd)/build-binary:/binary yuezk/gpdev:binary-builder - - name: Install binary in Docker - run: | - cd build-binary - tar -xJf ./*.bin.tar.xz - docker run --rm -v $(pwd):/binary yuezk/gpdev:binary-builder \ - bash -c "cd /binary/globalprotect-openconnect*/ && sudo make install && gpclient --version && gpservice --version && gpauth --version && gpgui-helper --version;" - - name: Upload binary - uses: actions/upload-artifact@v3 - with: - name: artifact-binary-${{ matrix.os }} - if-no-files-found: error - path: | - build-binary/*.bin.tar.xz - build-binary/*.bin.tar.xz.sha256 + docker run --rm -v $(pwd)/build-gp:/gp yuezk/gpdev:gp-builder build-gpgui: needs: @@ -243,10 +130,7 @@ jobs: if: startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest needs: - - build-deb - - build-rpm - - build-pkgbuild - - build-binary + - build-gp - build-gpgui steps: diff --git a/Makefile b/Makefile index 78a0f80..dcf42bc 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ OFFLINE ?= 0 BUILD_FE ?= 1 +INCLUDE_GUI ?= 0 CARGO ?= cargo VERSION = $(shell $(CARGO) metadata --no-deps --format-version 1 | jq -r '.packages[0].version') @@ -50,7 +51,19 @@ tarball: clean-tarball tar --exclude .vendor --exclude target --transform 's,^,${PKG}/,' -czf .build/tarball/${PKG}.tar.gz * .cargo -build: build-fe build-rs +download-gui: + rm -rf .build/gpgui + + if [ $(INCLUDE_GUI) -eq 1 ]; then \ + echo "Downloading GlobalProtect GUI..."; \ + mkdir -p .build/gpgui; \ + curl -sSL https://github.com/yuezk/GlobalProtect-openconnect/releases/download/v$(VERSION)/gpgui_$(VERSION)_$(shell uname -m).bin.tar.xz -o .build/gpgui/gpgui_$(VERSION)_x$(shell uname -m).bin.tar.xz; \ + tar -xJf .build/gpgui/*.tar.xz -C .build/gpgui; \ + else \ + echo "Skipping GlobalProtect GUI download (INCLUDE_GUI=0)"; \ + fi + +build: download-gui build-fe build-rs # Install and build the frontend # If OFFLINE is set to 1, skip it @@ -88,6 +101,10 @@ install: install -Dm755 target/release/gpservice $(DESTDIR)/usr/bin/gpservice install -Dm755 target/release/gpgui-helper $(DESTDIR)/usr/bin/gpgui-helper + if [ -f .build/gpgui/gpgui_*/gpgui ]; then \ + install -Dm755 .build/gpgui/gpgui_*/gpgui $(DESTDIR)/usr/bin/gpgui; \ + fi + install -Dm644 packaging/files/usr/share/applications/gpgui.desktop $(DESTDIR)/usr/share/applications/gpgui.desktop install -Dm644 packaging/files/usr/share/icons/hicolor/scalable/apps/gpgui.svg $(DESTDIR)/usr/share/icons/hicolor/scalable/apps/gpgui.svg install -Dm644 packaging/files/usr/share/icons/hicolor/32x32/apps/gpgui.png $(DESTDIR)/usr/share/icons/hicolor/32x32/apps/gpgui.png @@ -95,6 +112,8 @@ install: install -Dm644 packaging/files/usr/share/icons/hicolor/256x256@2/apps/gpgui.png $(DESTDIR)/usr/share/icons/hicolor/256x256@2/apps/gpgui.png install -Dm644 packaging/files/usr/share/polkit-1/actions/com.yuezk.gpgui.policy $(DESTDIR)/usr/share/polkit-1/actions/com.yuezk.gpgui.policy + update-desktop-database $(DESTDIR)/usr/share/applications + uninstall: @echo "Uninstalling $(PKG_NAME)..." @@ -111,6 +130,8 @@ uninstall: rm -f $(DESTDIR)/usr/share/icons/hicolor/256x256@2/apps/gpgui.png rm -f $(DESTDIR)/usr/share/polkit-1/actions/com.yuezk.gpgui.policy + update-desktop-database $(DESTDIR)/usr/share/applications + clean-debian: rm -rf .build/deb diff --git a/packaging/binary/Makefile.in b/packaging/binary/Makefile.in index 96b7faa..244dccb 100644 --- a/packaging/binary/Makefile.in +++ b/packaging/binary/Makefile.in @@ -5,6 +5,7 @@ install: install -Dm755 artifacts/usr/bin/gpservice $(DESTDIR)/usr/bin/gpservice install -Dm755 artifacts/usr/bin/gpauth $(DESTDIR)/usr/bin/gpauth install -Dm755 artifacts/usr/bin/gpgui-helper $(DESTDIR)/usr/bin/gpgui-helper + install -Dm755 artifacts/usr/bin/gpgui $(DESTDIR)/usr/bin/gpgui install -Dm644 artifacts/usr/share/applications/gpgui.desktop $(DESTDIR)/usr/share/applications/gpgui.desktop install -Dm644 artifacts/usr/share/icons/hicolor/scalable/apps/gpgui.svg $(DESTDIR)/usr/share/icons/hicolor/scalable/apps/gpgui.svg diff --git a/packaging/rpm/globalprotect-openconnect.spec.in b/packaging/rpm/globalprotect-openconnect.spec.in index af3fde5..12a0b0d 100644 --- a/packaging/rpm/globalprotect-openconnect.spec.in +++ b/packaging/rpm/globalprotect-openconnect.spec.in @@ -44,10 +44,7 @@ make build OFFLINE=@OFFLINE@ BUILD_FE=0 %files %defattr(-,root,root) -%{_bindir}/gpclient -%{_bindir}/gpservice -%{_bindir}/gpauth -%{_bindir}/gpgui-helper +%{_bindir}/* %{_datadir}/applications/gpgui.desktop %{_datadir}/icons/hicolor/32x32/apps/gpgui.png %{_datadir}/icons/hicolor/128x128/apps/gpgui.png