123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- on:
- workflow_dispatch:
- inputs:
- version:
- description: Tag of the version to build
- required: true
- env:
- CARGO_TERM_COLOR: always
- jobs:
- build:
- strategy:
- fail-fast: false
- matrix:
- platform: [macos-latest, ubuntu-22.04, windows-latest]
- runs-on: ${{ matrix.platform }}
- defaults:
- run:
- shell: bash
- steps:
- - name: Checkout hoppscotch/hoppscotch
- uses: actions/checkout@v3
- with:
- repository: hoppscotch/hoppscotch
- ref: main
- token: ${{ secrets.CHECKOUT_GITHUB_TOKEN }}
- - name: Setup Node.js
- uses: actions/setup-node@v3
- with:
- node-version: 20
- - name: Setup pnpm
- uses: pnpm/action-setup@v2
- with:
- version: 9
- - name: Install Rust
- uses: actions-rs/toolchain@v1
- with:
- toolchain: stable
- override: true
- - name: Install Rust targets (Mac)
- if: matrix.platform == 'macos-latest'
- run: |
- rustup target add aarch64-apple-darwin
- rustup target add x86_64-apple-darwin
- - name: Install additional tools (Linux)
- if: matrix.platform == 'ubuntu-22.04'
- run: |
- # Install Tauri CLI (binary)
- curl -LO "https://github.com/tauri-apps/tauri/releases/download/tauri-cli-v2.0.1/cargo-tauri-x86_64-unknown-linux-gnu.tgz"
- tar -xzf cargo-tauri-x86_64-unknown-linux-gnu.tgz
- chmod +x cargo-tauri
- sudo mv cargo-tauri /usr/local/bin/tauri
- # Install Trunk (binary)
- curl -LO "https://github.com/thedodd/trunk/releases/download/v0.17.5/trunk-x86_64-unknown-linux-gnu.tar.gz"
- tar -xzf trunk-x86_64-unknown-linux-gnu.tar.gz
- chmod +x trunk
- sudo mv trunk /usr/local/bin/
- - name: Install additional tools (Mac)
- if: matrix.platform == 'macos-latest'
- run: |
- # Install Tauri CLI (binary)
- mkdir __dist/
- cd __dist/
- curl -LO "https://github.com/tauri-apps/tauri/releases/download/tauri-cli-v2.0.1/cargo-tauri-aarch64-apple-darwin.zip"
- unzip cargo-tauri-aarch64-apple-darwin.zip
- chmod +x cargo-tauri
- sudo mv cargo-tauri /usr/local/bin/tauri
- - name: Install system dependencies (Ubuntu only)
- if: matrix.platform == 'ubuntu-22.04'
- run: |
- sudo apt-get update
- sudo apt-get install -y libwebkit2gtk-4.1-dev \
- build-essential \
- curl \
- wget \
- file \
- libxdo-dev \
- libssl-dev \
- libayatana-appindicator3-dev \
- librsvg2-dev
- - name: Setting up Windows Environment and injecting before bundle command (Windows only)
- if: matrix.platform == 'windows-latest'
- shell: bash
- env:
- WINDOWS_SIGN_COMMAND: trusted-signing-cli -e ${{ secrets.AZURE_ENDPOINT }} -a ${{ secrets.AZURE_CODE_SIGNING_NAME }} -c ${{ secrets.AZURE_CERT_PROFILE_NAME }} %1
- run: |
- cd packages/hoppscotch-agent
- # Inject signing command into main conf.
- cat './src-tauri/tauri.conf.json' | jq '.bundle .windows += { "signCommand": env.WINDOWS_SIGN_COMMAND}' > './src-tauri/temp.json' && mv './src-tauri/temp.json' './src-tauri/tauri.conf.json'
- # Inject signing command into portable conf.
- cat './src-tauri/tauri.portable.conf.json' | jq '.bundle .windows += { "signCommand": env.WINDOWS_SIGN_COMMAND}' > './src-tauri/temp_portable.json' && mv './src-tauri/temp_portable.json' './src-tauri/tauri.portable.conf.json'
- cargo install trusted-signing-cli@0.3.0
- - name: Set platform-specific variables
- run: |
- if [ "${{ matrix.platform }}" = "ubuntu-22.04" ]; then
- echo "target_arch=$(rustc -Vv | grep host | awk '{print $2}')" >> $GITHUB_ENV
- echo "target_ext=" >> $GITHUB_ENV
- echo "target_os_name=linux" >> $GITHUB_ENV
- elif [ "${{ matrix.platform }}" = "windows-latest" ]; then
- echo "target_arch=x86_64-pc-windows-msvc" >> $GITHUB_ENV
- echo "target_ext=.exe" >> $GITHUB_ENV
- echo "target_os_name=win" >> $GITHUB_ENV
- elif [ "${{ matrix.platform }}" = "macos-latest" ]; then
- echo "target_os_name=mac" >> $GITHUB_ENV
- fi
- - name: Setup macOS code signing
- if: matrix.platform == 'macos-latest'
- env:
- APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
- APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
- APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
- KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
- run: |
- echo $APPLE_CERTIFICATE | base64 --decode > certificate.p12
- security create-keychain -p $KEYCHAIN_PASSWORD build.keychain
- security default-keychain -s build.keychain
- security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain
- security import certificate.p12 -k build.keychain -P $APPLE_CERTIFICATE_PASSWORD -T /usr/bin/codesign
- security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain
- - name: Cache Rust dependencies
- uses: actions/cache@v3
- with:
- path: |
- ~/.cargo/registry
- ~/.cargo/git
- target
- key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- - name: Install dependencies
- shell: bash
- run: |
- cd packages/hoppscotch-agent
- pnpm install --filter hoppscotch-agent
- - name: Build Tauri app (Linux)
- if: matrix.platform == 'ubuntu-22.04'
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.AGENT_TAURI_SIGNING_PRIVATE_KEY }}
- TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.AGENT_TAURI_SIGNING_PASSWORD }}
- run: |
- cd packages/hoppscotch-agent
- pnpm tauri build --verbose -b deb -b appimage -b updater
- - name: Build Tauri app (Mac)
- if: matrix.platform == 'macos-latest'
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.AGENT_TAURI_SIGNING_PRIVATE_KEY }}
- TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.AGENT_TAURI_SIGNING_PASSWORD }}
- APPLE_ID: ${{ secrets.APPLE_ID }}
- APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
- APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
- APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
- run: |
- cd packages/hoppscotch-agent
- pnpm tauri build --verbose --target x86_64-apple-darwin
- pnpm tauri build --verbose --target aarch64-apple-darwin
- - name: Build Tauri app (Windows)
- if: matrix.platform == 'windows-latest'
- shell: powershell
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.AGENT_TAURI_SIGNING_PRIVATE_KEY }}
- TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.AGENT_TAURI_SIGNING_PASSWORD }}
- AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
- AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
- AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
- run: |
- cd packages/hoppscotch-agent
- # Build the portable version first and move it.
- # This way the next build will regenerate `hoppscotch-agent.exe`.
- pnpm tauri build --verbose --config src-tauri/tauri.portable.conf.json -- --no-default-features --features portable
- Rename-Item -Path "src-tauri/target/release/hoppscotch-agent.exe" -NewName "hoppscotch-agent-portable.exe"
- # Build the installer version.
- pnpm tauri build --verbose -b msi -b updater
- - name: Zip portable executable (Windows)
- if: matrix.platform == 'windows-latest'
- shell: powershell
- run: |
- Compress-Archive -Path "packages/hoppscotch-agent/src-tauri/target/release/hoppscotch-agent-portable.exe" -DestinationPath "packages/hoppscotch-agent/src-tauri/target/release/Hoppscotch_Agent_win_x64_portable.zip"
- - name: Prepare artifacts
- shell: bash
- run: |
- mkdir artifacts
- mkdir artifacts/sigs
- if [ "${{ matrix.platform }}" = "ubuntu-22.04" ]; then
- mv packages/hoppscotch-agent/src-tauri/target/release/bundle/appimage/*.AppImage artifacts/Hoppscotch_Agent_linux_x64.AppImage
- mv packages/hoppscotch-agent/src-tauri/target/release/bundle/appimage/*.AppImage.sig artifacts/sigs/Hoppscotch_Agent_linux_x64.AppImage.sig
- mv packages/hoppscotch-agent/src-tauri/target/release/bundle/deb/*.deb artifacts/Hoppscotch_Agent_linux_x64.deb
- elif [ "${{ matrix.platform }}" = "macos-latest" ]; then
- mv packages/hoppscotch-agent/src-tauri/target/x86_64-apple-darwin/release/bundle/dmg/*_x64.dmg artifacts/Hoppscotch_Agent_mac_x64.dmg
- mv packages/hoppscotch-agent/src-tauri/target/x86_64-apple-darwin/release/bundle/macos/*.app.tar.gz artifacts/Hoppscotch_Agent_mac_update_x64.tar.gz
- mv packages/hoppscotch-agent/src-tauri/target/x86_64-apple-darwin/release/bundle/macos/*.app.tar.gz.sig artifacts/sigs/Hoppscotch_Agent_mac_update_x64.tar.gz.sig
- mv packages/hoppscotch-agent/src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/*_aarch64.dmg artifacts/Hoppscotch_Agent_mac_aarch64.dmg
- mv packages/hoppscotch-agent/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/*.app.tar.gz artifacts/Hoppscotch_Agent_mac_update_aarch64.tar.gz
- mv packages/hoppscotch-agent/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/*.app.tar.gz.sig artifacts/sigs/Hoppscotch_Agent_mac_update_aarch64.tar.gz.sig
- elif [ "${{ matrix.platform }}" = "windows-latest" ]; then
- mv packages/hoppscotch-agent/src-tauri/target/release/bundle/msi/*_x64_en-US.msi artifacts/Hoppscotch_Agent_win_x64.msi
- mv packages/hoppscotch-agent/src-tauri/target/release/bundle/msi/*_x64_en-US.msi.sig artifacts/sigs/Hoppscotch_Agent_win_x64.msi.sig
- mv packages/hoppscotch-agent/src-tauri/target/release/Hoppscotch_Agent_win_x64_portable.zip artifacts/Hoppscotch_Agent_win_x64_portable.zip
- fi
- - name: Generate checksums (Linux)
- if: matrix.platform == 'ubuntu-22.04'
- run: |
- cd artifacts
- mkdir shas
- for file in *; do
- if [ -f "$file" ]; then
- sha256sum "$file" > "shas/${file}.sha256"
- fi
- done
- - name: Generate checksums (Mac)
- if: matrix.platform == 'macos-latest'
- run: |
- cd artifacts
- mkdir shas
- for file in *; do
- if [ -f "$file" ]; then
- shasum -a 256 "$file" > "shas/${file}.sha256"
- fi
- done
- - name: Upload artifacts
- uses: actions/upload-artifact@v4
- with:
- name: Hoppscotch_Agent-${{ matrix.platform }}
- path: artifacts/*
|