diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 8b858afe..975a0cc1 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,4 +1,4 @@ -name: Build GPGUI +name: Build on: push: paths-ignore: @@ -8,301 +8,325 @@ on: - .devcontainer branches: - main + - dev tags: - latest - v*.*.* jobs: - # Include arm64 if ref is a tag - setup-matrix: + tarball: runs-on: ubuntu-latest - outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - - name: Set up matrix - id: set-matrix - run: | - if [[ "${{ github.ref }}" == "refs/tags/"* ]]; then - echo "matrix=[\"amd64\", \"arm64\"]" >> $GITHUB_OUTPUT - else - echo "matrix=[\"amd64\"]" >> $GITHUB_OUTPUT - fi - - build-fe: - runs-on: ubuntu-latest - steps: - - name: Checkout gpgui repo - uses: actions/checkout@v3 - with: - token: ${{ secrets.GH_PAT }} - repository: yuezk/gpgui - - - name: Install Node.js - uses: actions/setup-node@v4 - with: - node-version: 18 - - uses: pnpm/action-setup@v2 with: version: 8 - - - name: Install dependencies - run: | - cd app - pnpm install - - name: Build - run: | - cd app - pnpm run build - - - name: Upload artifacts - uses: actions/upload-artifact@v3 - with: - name: gpgui-fe - path: app/dist - - build-tauri-amd64: - needs: [build-fe] - runs-on: ubuntu-latest - steps: - - name: Checkout gpgui repo - uses: actions/checkout@v3 - with: - token: ${{ secrets.GH_PAT }} - repository: yuezk/gpgui - path: gpgui - - - name: Checkout gp repo - uses: actions/checkout@v3 - with: - token: ${{ secrets.GH_PAT }} - repository: yuezk/GlobalProtect-openconnect - path: gp - - - name: Download gpgui-fe artifact - uses: actions/download-artifact@v3 - with: - name: gpgui-fe - path: gpgui/app/dist - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_TOKEN }} - - - name: Build Tauri in Docker - run: | - docker run \ - --rm \ - -v $(pwd):/${{ github.workspace }} \ - -w ${{ github.workspace }} \ - -e CI=true \ - yuezk/gpdev:main \ - "./gpgui/scripts/build.sh" - - - name: Upload artifacts - uses: actions/upload-artifact@v3 - with: - name: artifact-amd64-tauri - path: | - gpgui/.tmp/artifact - - build-tauri-arm64: - if: startsWith(github.ref, 'refs/tags/') - needs: [build-fe] - runs-on: self-hosted - steps: - - name: Checkout gpgui repo - uses: actions/checkout@v3 - with: - token: ${{ secrets.GH_PAT }} - repository: yuezk/gpgui - path: gpgui - - - name: Checkout gp repo + - name: Checkout GlobalProtect-openconnect uses: actions/checkout@v3 with: token: ${{ secrets.GH_PAT }} repository: yuezk/GlobalProtect-openconnect path: gp - - - name: Download gpgui-fe artifact - uses: actions/download-artifact@v3 - with: - name: gpgui-fe - path: gpgui/app/dist - - name: Build Tauri - run: | - ./gpgui/scripts/build.sh - - - name: Upload artifacts - uses: actions/upload-artifact@v3 - with: - name: artifact-arm64-tauri - path: | - gpgui/.tmp/artifact - - package-tarball: - needs: [build-tauri-amd64, build-tauri-arm64] - runs-on: ubuntu-latest - steps: - - name: Checkout gpgui repo - uses: actions/checkout@v3 - with: - token: ${{ secrets.GH_PAT }} - repository: yuezk/gpgui - path: gpgui - - - name: Download artifact-amd64-tauri - uses: actions/download-artifact@v3 - with: - name: artifact-amd64-tauri - path: gpgui/.tmp/artifact - - - name: Download artifact-arm64-tauri - uses: actions/download-artifact@v3 - with: - name: artifact-arm64-tauri - path: gpgui/.tmp/artifact - - name: Create tarball run: | - ./gpgui/scripts/build-tarball.sh - + cd gp + make tarball - name: Upload tarball uses: actions/upload-artifact@v3 with: name: artifact-tarball path: | - gpgui/.tmp/tarball/*.tar.gz - - package-rpm: - needs: [setup-matrix, package-tarball] - runs-on: ubuntu-latest - strategy: - matrix: - arch: ${{ fromJson(needs.setup-matrix.outputs.matrix) }} - steps: - - name: Checkout gpgui repo - uses: actions/checkout@v3 - with: - token: ${{ secrets.GH_PAT }} - repository: yuezk/gpgui - path: gpgui - - - name: Download package tarball - uses: actions/download-artifact@v3 - with: - name: artifact-tarball - path: gpgui/.tmp/artifact - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - with: - platforms: ${{ matrix.arch }} - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_TOKEN }} - - - name: Create RPM package - run: | - docker run \ - --rm \ - -v $(pwd):/${{ github.workspace }} \ - -w ${{ github.workspace }} \ - --platform linux/${{ matrix.arch }} \ - yuezk/gpdev:rpm-builder \ - "./gpgui/scripts/build-rpm.sh" - - - name: Upload rpm artifacts - uses: actions/upload-artifact@v3 - with: - name: artifact-${{ matrix.arch }}-rpm - path: | - gpgui/.tmp/artifact/*.rpm + globalprotect-openconnect-*.tar.xz - package-pkgbuild: - needs: [setup-matrix, build-tauri-amd64, build-tauri-arm64] - runs-on: ubuntu-latest - strategy: - matrix: - arch: ${{ fromJson(needs.setup-matrix.outputs.matrix) }} - steps: - - name: Checkout gpgui repo - uses: actions/checkout@v3 - with: - token: ${{ secrets.GH_PAT }} - repository: yuezk/gpgui - path: gpgui - - - name: Download artifact-${{ matrix.arch }} - uses: actions/download-artifact@v3 - with: - name: artifact-${{ matrix.arch }}-tauri - path: gpgui/.tmp/artifact - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - with: - platforms: ${{ matrix.arch }} - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_TOKEN }} - - - name: Generate PKGBUILD - run: | - export CI_ARCH=${{ matrix.arch }} - ./gpgui/scripts/generate-pkgbuild.sh - - - name: Build PKGBUILD package - run: | - # Build package - docker run \ - --rm \ - -v $(pwd)/gpgui/.tmp/pkgbuild:/pkgbuild \ - --platform linux/${{ matrix.arch }} \ - yuezk/gpdev:pkgbuild - - - name: Upload pkgbuild artifacts - uses: actions/upload-artifact@v3 - with: - name: artifact-${{ matrix.arch }}-pkgbuild - path: | - gpgui/.tmp/pkgbuild/*.pkg.tar.zst - - gh-release: - if: startsWith(github.ref, 'refs/tags/') - runs-on: ubuntu-latest - needs: - - package-rpm - - package-pkgbuild - - steps: - - name: Download artifact - uses: actions/download-artifact@v3 - with: - path: artifact - # pattern: artifact-* - # merge-multiple: true - - # - name: Generate checksum - # uses: jmgilman/actions-generate-checksum@v1 - # with: - # output: checksums.txt - # patterns: | - # artifact/* - - - name: Create GH release - uses: softprops/action-gh-release@v1 - with: - token: ${{ secrets.GH_PAT }} - prerelease: ${{ contains(github.ref, 'latest') }} - fail_on_unmatched_files: true - files: | - artifact/artifact-*/* + # Include arm64 if ref is a tag + # setup-matrix: + # runs-on: ubuntu-latest + # outputs: + # matrix: ${{ steps.set-matrix.outputs.matrix }} + # steps: + # - name: Set up matrix + # id: set-matrix + # run: | + # if [[ "${{ github.ref }}" == "refs/tags/"* ]]; then + # echo "matrix=[\"amd64\", \"arm64\"]" >> $GITHUB_OUTPUT + # else + # echo "matrix=[\"amd64\"]" >> $GITHUB_OUTPUT + # fi + + # build-fe: + # runs-on: ubuntu-latest + # steps: + # - name: Checkout gpgui repo + # uses: actions/checkout@v3 + # with: + # token: ${{ secrets.GH_PAT }} + # repository: yuezk/gpgui + + # - name: Install Node.js + # uses: actions/setup-node@v4 + # with: + # node-version: 18 + + # - uses: pnpm/action-setup@v2 + # with: + # version: 8 + + # - name: Install dependencies + # run: | + # cd app + # pnpm install + # - name: Build + # run: | + # cd app + # pnpm run build + + # - name: Upload artifacts + # uses: actions/upload-artifact@v3 + # with: + # name: gpgui-fe + # path: app/dist + + # build-tauri-amd64: + # needs: [build-fe] + # runs-on: ubuntu-latest + # steps: + # - name: Checkout gpgui repo + # uses: actions/checkout@v3 + # with: + # token: ${{ secrets.GH_PAT }} + # repository: yuezk/gpgui + # path: gpgui + + # - name: Checkout gp repo + # uses: actions/checkout@v3 + # with: + # token: ${{ secrets.GH_PAT }} + # repository: yuezk/GlobalProtect-openconnect + # path: gp + + # - name: Download gpgui-fe artifact + # uses: actions/download-artifact@v3 + # with: + # name: gpgui-fe + # path: gpgui/app/dist + + # - name: Login to Docker Hub + # uses: docker/login-action@v3 + # with: + # username: ${{ secrets.DOCKER_HUB_USERNAME }} + # password: ${{ secrets.DOCKER_HUB_TOKEN }} + + # - name: Build Tauri in Docker + # run: | + # docker run \ + # --rm \ + # -v $(pwd):/${{ github.workspace }} \ + # -w ${{ github.workspace }} \ + # -e CI=true \ + # yuezk/gpdev:main \ + # "./gpgui/scripts/build.sh" + + # - name: Upload artifacts + # uses: actions/upload-artifact@v3 + # with: + # name: artifact-amd64-tauri + # path: | + # gpgui/.tmp/artifact + + # build-tauri-arm64: + # if: startsWith(github.ref, 'refs/tags/') + # needs: [build-fe] + # runs-on: self-hosted + # steps: + # - name: Checkout gpgui repo + # uses: actions/checkout@v3 + # with: + # token: ${{ secrets.GH_PAT }} + # repository: yuezk/gpgui + # path: gpgui + + # - name: Checkout gp repo + # uses: actions/checkout@v3 + # with: + # token: ${{ secrets.GH_PAT }} + # repository: yuezk/GlobalProtect-openconnect + # path: gp + + # - name: Download gpgui-fe artifact + # uses: actions/download-artifact@v3 + # with: + # name: gpgui-fe + # path: gpgui/app/dist + # - name: Build Tauri + # run: | + # ./gpgui/scripts/build.sh + + # - name: Upload artifacts + # uses: actions/upload-artifact@v3 + # with: + # name: artifact-arm64-tauri + # path: | + # gpgui/.tmp/artifact + + # package-tarball: + # needs: [build-tauri-amd64, build-tauri-arm64] + # runs-on: ubuntu-latest + # steps: + # - name: Checkout gpgui repo + # uses: actions/checkout@v3 + # with: + # token: ${{ secrets.GH_PAT }} + # repository: yuezk/gpgui + # path: gpgui + + # - name: Download artifact-amd64-tauri + # uses: actions/download-artifact@v3 + # with: + # name: artifact-amd64-tauri + # path: gpgui/.tmp/artifact + + # - name: Download artifact-arm64-tauri + # uses: actions/download-artifact@v3 + # with: + # name: artifact-arm64-tauri + # path: gpgui/.tmp/artifact + + # - name: Create tarball + # run: | + # ./gpgui/scripts/build-tarball.sh + + # - name: Upload tarball + # uses: actions/upload-artifact@v3 + # with: + # name: artifact-tarball + # path: | + # gpgui/.tmp/tarball/*.tar.gz + + # package-rpm: + # needs: [setup-matrix, package-tarball] + # runs-on: ubuntu-latest + # strategy: + # matrix: + # arch: ${{ fromJson(needs.setup-matrix.outputs.matrix) }} + # steps: + # - name: Checkout gpgui repo + # uses: actions/checkout@v3 + # with: + # token: ${{ secrets.GH_PAT }} + # repository: yuezk/gpgui + # path: gpgui + + # - name: Download package tarball + # uses: actions/download-artifact@v3 + # with: + # name: artifact-tarball + # path: gpgui/.tmp/artifact + + # - name: Set up QEMU + # uses: docker/setup-qemu-action@v3 + # with: + # platforms: ${{ matrix.arch }} + + # - name: Login to Docker Hub + # uses: docker/login-action@v3 + # with: + # username: ${{ secrets.DOCKER_HUB_USERNAME }} + # password: ${{ secrets.DOCKER_HUB_TOKEN }} + + # - name: Create RPM package + # run: | + # docker run \ + # --rm \ + # -v $(pwd):/${{ github.workspace }} \ + # -w ${{ github.workspace }} \ + # --platform linux/${{ matrix.arch }} \ + # yuezk/gpdev:rpm-builder \ + # "./gpgui/scripts/build-rpm.sh" + + # - name: Upload rpm artifacts + # uses: actions/upload-artifact@v3 + # with: + # name: artifact-${{ matrix.arch }}-rpm + # path: | + # gpgui/.tmp/artifact/*.rpm + + # package-pkgbuild: + # needs: [setup-matrix, build-tauri-amd64, build-tauri-arm64] + # runs-on: ubuntu-latest + # strategy: + # matrix: + # arch: ${{ fromJson(needs.setup-matrix.outputs.matrix) }} + # steps: + # - name: Checkout gpgui repo + # uses: actions/checkout@v3 + # with: + # token: ${{ secrets.GH_PAT }} + # repository: yuezk/gpgui + # path: gpgui + + # - name: Download artifact-${{ matrix.arch }} + # uses: actions/download-artifact@v3 + # with: + # name: artifact-${{ matrix.arch }}-tauri + # path: gpgui/.tmp/artifact + + # - name: Set up QEMU + # uses: docker/setup-qemu-action@v3 + # with: + # platforms: ${{ matrix.arch }} + + # - name: Login to Docker Hub + # uses: docker/login-action@v3 + # with: + # username: ${{ secrets.DOCKER_HUB_USERNAME }} + # password: ${{ secrets.DOCKER_HUB_TOKEN }} + + # - name: Generate PKGBUILD + # run: | + # export CI_ARCH=${{ matrix.arch }} + # ./gpgui/scripts/generate-pkgbuild.sh + + # - name: Build PKGBUILD package + # run: | + # # Build package + # docker run \ + # --rm \ + # -v $(pwd)/gpgui/.tmp/pkgbuild:/pkgbuild \ + # --platform linux/${{ matrix.arch }} \ + # yuezk/gpdev:pkgbuild + + # - name: Upload pkgbuild artifacts + # uses: actions/upload-artifact@v3 + # with: + # name: artifact-${{ matrix.arch }}-pkgbuild + # path: | + # gpgui/.tmp/pkgbuild/*.pkg.tar.zst + + # gh-release: + # if: startsWith(github.ref, 'refs/tags/') + # runs-on: ubuntu-latest + # needs: + # - package-rpm + # - package-pkgbuild + + # steps: + # - name: Download artifact + # uses: actions/download-artifact@v3 + # with: + # path: artifact + # # pattern: artifact-* + # # merge-multiple: true + + # # - name: Generate checksum + # # uses: jmgilman/actions-generate-checksum@v1 + # # with: + # # output: checksums.txt + # # patterns: | + # # artifact/* + + # - name: Create GH release + # uses: softprops/action-gh-release@v1 + # with: + # token: ${{ secrets.GH_PAT }} + # prerelease: ${{ contains(github.ref, 'latest') }} + # fail_on_unmatched_files: true + # files: | + # artifact/artifact-*/* diff --git a/.gitignore b/.gitignore index 29d6314e..3b587c7a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ .pnpm-store .env vendor + +.cargo diff --git a/Makefile b/Makefile index c84b7c28..42c2b004 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,6 @@ +VERSION=$(shell cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version') +PKG_NAME=globalprotect-openconnect-$(VERSION) + build: build-fe build-rs gpgui-helper build-fe: @@ -9,6 +12,14 @@ build-rs: gpgui-helper: cargo build --release --frozen -p gpgui-helper --features "tauri/custom-protocol" +tarball: build-fe + rm -rf apps/gpgui-helper/node_modules + + mkdir -p .cargo + cargo vendor > .cargo/config.toml + + tar --transform 's,^,${PKG_NAME}/,' -cJf ../${PKG_NAME}.tar.xz * .cargo + install: install -Dm755 target/release/gpclient $(DESTDIR)/usr/bin/gpclient install -Dm755 target/release/gpauth $(DESTDIR)/usr/bin/gpauth