From fe3d3df662117ca45c7b2a5cf3d94b215044675a Mon Sep 17 00:00:00 2001 From: Kevin Yue Date: Wed, 22 Jan 2025 21:54:16 +0800 Subject: [PATCH] ci: upload offline tarball --- .github/workflows/build.yaml | 63 ++++++++++++++++++- .github/workflows/publish.yaml | 33 +++++----- .github/workflows/release.yaml | 17 ++--- Makefile | 3 + .../rpm/globalprotect-openconnect.spec.in | 2 +- scripts/gh-release.sh | 4 +- 6 files changed, 94 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 36499aaf..a51454a2 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -44,7 +44,8 @@ jobs: with: version: 9 - name: Prepare workspace - run: rm -rf source && mkdir source + run: rm -rf source && mkdir -p source/artifacts + - name: Checkout GlobalProtect-openconnect uses: actions/checkout@v4 with: @@ -52,6 +53,7 @@ jobs: repository: yuezk/GlobalProtect-openconnect ref: ${{ github.ref }} path: source/gp + - name: Create tarball run: | cd source/gp @@ -60,13 +62,69 @@ jobs: touch SNAPSHOT fi make tarball + + mv -v .build/tarball/*.tar.gz ../artifacts/ + + - name: Generate RPM spec file + env: + RELEASE_TAG: ${{ github.ref == 'refs/heads/dev' && 'snapshot' || github.ref_name }} + run: | + cd source/gp + + make init-rpm \ + REVISION='1%{?dist}' \ + RPM_SOURCE=https://github.com/yuezk/GlobalProtect-openconnect/releases/download/${RELEASE_TAG}/%{name}-%{version}.tar.gz + + mv -v .build/rpm/*.spec ../artifacts/ + - name: Upload tarball uses: actions/upload-artifact@v4 with: name: artifact-source if-no-files-found: error path: | - source/gp/.build/tarball/*.tar.gz + source/artifacts/* + + tarball-offline: + if: ${{ github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/') }} + runs-on: ubuntu-latest + needs: + - tarball + steps: + - uses: pnpm/action-setup@v4 + with: + version: 9 + + - name: Prepare workspace + run: rm -rf source-offline && mkdir source-offline + + - name: Download tarball + uses: actions/download-artifact@v4 + with: + name: artifact-source + path: source-offline + + - name: Create offline tarball + run: | + cd source-offline + + offline_tarball=$(basename *.tar.gz .tar.gz).offline.tar.gz + + # Extract the tarball + tar -xzf *.tar.gz + + cd */ + make tarball OFFLINE=1 + + # Rename the tarball to .offline.tar.gz + mv -v .build/tarball/*.tar.gz ../$offline_tarball + + - name: Upload offline tarball + uses: actions/upload-artifact@v4 + with: + path: source-offline/*.offline.tar.gz + name: artifact-source-offline + if-no-files-found: error build-gp: needs: @@ -168,6 +226,7 @@ jobs: runs-on: ubuntu-latest needs: - tarball + - tarball-offline - build-gp - build-gpgui diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index add284ec..2f761cec 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -52,22 +52,26 @@ jobs: version: 9 - name: Prepare workspace run: rm -rf publish-ppa && mkdir publish-ppa - - name: Download ${{ inputs.tag }} source code - uses: robinraju/release-downloader@v1.9 - with: - token: ${{ secrets.GH_PAT }} - tag: ${{ inputs.tag }} - fileName: globalprotect-openconnect-*.tar.gz - tarBall: false - zipBall: false - out-file-path: publish-ppa - - name: Make the offline tarball + - name: Download ${{ inputs.tag }} offline source code + env: + GH_TOKEN: ${{ secrets.GH_PAT }} + run: | + gh -R yuezk/GlobalProtect-openconnect \ + release download ${{ inputs.tag }} \ + --pattern '*.offline.tar.gz' \ + --dir publish-ppa + - name: Patch the source code run: | cd publish-ppa - tar -xf globalprotect-openconnect-*.tar.gz - cd globalprotect-openconnect-*/ - make tarball OFFLINE=1 + # Rename the source tarball without the offline suffix + mv -v *.tar.gz $(basename *.tar.gz .offline.tar.gz).tar.gz + + # Extract the source tarball + tar -xzf *.tar.gz + + # Prepare the debian directory with custom files + cd globalprotect-openconnect-*/ # Prepare the debian directory with custom files mkdir -p .build/debian @@ -78,7 +82,6 @@ jobs: cp -v packaging/deb/postrm .build/debian/postrm sed -i "s/@RUST@/cargo-1.80/g" .build/debian/control - sed -i "s/@OFFLINE@/1/g" .build/debian/rules sed -i "s/@BUILD_GUI@/1/g" .build/debian/rules sed -i "s/@RUST_VERSION@/1.80/g" .build/debian/rules @@ -89,7 +92,7 @@ jobs: repository: "yuezk/globalprotect-openconnect" gpg_private_key: ${{ secrets.PPA_GPG_PRIVATE_KEY }} gpg_passphrase: ${{ secrets.PPA_GPG_PASSPHRASE }} - tarball: publish-ppa/globalprotect-openconnect-*/.build/tarball/*.tar.gz + tarball: publish-ppa/globalprotect-openconnect-*.tar.gz debian_dir: publish-ppa/globalprotect-openconnect-*/.build/debian deb_email: "k3vinyue@gmail.com" deb_fullname: "Kevin Yue" diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index ddf72d76..665a455e 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -96,15 +96,16 @@ jobs: steps: - name: Prepare workspace run: rm -rf build-${{ matrix.package }} && mkdir -p build-${{ matrix.package }} + - name: Download ${{ inputs.tag }} source code - uses: robinraju/release-downloader@v1.9 - with: - token: ${{ secrets.GH_PAT }} - tag: ${{ inputs.tag }} - fileName: globalprotect-openconnect-*.tar.gz - tarBall: false - zipBall: false - out-file-path: build-${{ matrix.package }} + env: + GH_TOKEN: ${{ secrets.GH_PAT }} + run: | + gh -R yuezk/GlobalProtect-openconnect \ + release download ${{ inputs.tag }} \ + --pattern '*[^offline].tar.gz' \ + --dir build-${{ matrix.package }} + - name: Docker Login run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin - name: Build ${{ matrix.package }} package in Docker diff --git a/Makefile b/Makefile index c453141e..c84a7e8e 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,8 @@ RUST_VERSION = 1.80 VERSION = $(shell $(CARGO) metadata --no-deps --format-version 1 | jq -r '.packages[0].version') REVISION ?= 1 +RPM_SOURCE ?= %{name}.tar.gz + PPA_REVISION ?= 1 PKG_NAME = globalprotect-openconnect PKG = $(PKG_NAME)-$(VERSION) @@ -234,6 +236,7 @@ init-rpm: clean-rpm sed -i "s/@VERSION@/$(VERSION)/g" .build/rpm/globalprotect-openconnect.spec sed -i "s/@REVISION@/$(REVISION)/g" .build/rpm/globalprotect-openconnect.spec + sed -i "s|@SOURCE@|$(RPM_SOURCE)|g" .build/rpm/globalprotect-openconnect.spec sed -i "s/@OFFLINE@/$(OFFLINE)/g" .build/rpm/globalprotect-openconnect.spec sed -i "s/@DATE@/$(shell LC_ALL=en.US date "+%a %b %d %Y")/g" .build/rpm/globalprotect-openconnect.spec diff --git a/packaging/rpm/globalprotect-openconnect.spec.in b/packaging/rpm/globalprotect-openconnect.spec.in index 356e69f9..b3102413 100644 --- a/packaging/rpm/globalprotect-openconnect.spec.in +++ b/packaging/rpm/globalprotect-openconnect.spec.in @@ -6,7 +6,7 @@ Group: Productivity/Networking/PPP License: GPL-3.0 URL: https://github.com/yuezk/GlobalProtect-openconnect -Source: %{name}.tar.gz +Source: @SOURCE@ BuildRequires: make BuildRequires: rust diff --git a/scripts/gh-release.sh b/scripts/gh-release.sh index a862062e..6178dff3 100755 --- a/scripts/gh-release.sh +++ b/scripts/gh-release.sh @@ -28,7 +28,7 @@ release_snapshot() { echo "Uploading new assets..." gh -R "$REPO" release upload "$TAG" \ - "$PROJECT_DIR"/.build/artifacts/artifact-source/* \ + "$PROJECT_DIR"/.build/artifacts/artifact-source*/* \ "$PROJECT_DIR"/.build/artifacts/artifact-gpgui-*/* } @@ -40,7 +40,7 @@ release_tag() { gh -R "$REPO" release create $TAG \ --title "$TAG" \ --notes "$RELEASE_NOTES" \ - "$PROJECT_DIR"/.build/artifacts/artifact-source/* \ + "$PROJECT_DIR"/.build/artifacts/artifact-source*/* \ "$PROJECT_DIR"/.build/artifacts/artifact-gpgui-*/* }