diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 05cd7762..00000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,2 +0,0 @@ -github: hoppscotch -open_collective: hoppscotch diff --git a/.github/ISSUE_TEMPLATE/--bug-report.yaml b/.github/ISSUE_TEMPLATE/--bug-report.yaml deleted file mode 100644 index f54aaa40..00000000 --- a/.github/ISSUE_TEMPLATE/--bug-report.yaml +++ /dev/null @@ -1,117 +0,0 @@ -name: Bug Report -description: Create a bug report to help us improve Hoppscotch -title: "[bug]: " -labels: [bug, need testing] -body: - - type: markdown - attributes: - value: | - Thank you for taking the time to report this issue. Complete information helps us resolve it faster. - - - type: checkboxes - attributes: - label: Is there an existing issue for this? - description: Please search to see if an issue already exists for the bug you encountered - options: - - label: I have searched existing issues and this bug hasn't been reported yet - required: true - - - type: dropdown - id: platform - attributes: - label: Platform - description: How are you accessing Hoppscotch? - options: - - Web App - - Desktop App - validations: - required: true - - - type: dropdown - id: browser - attributes: - label: Browser - description: | - Which browser is affected? - - For web app: Select the browser you're using - - For desktop app: Select your default browser - options: - - Chrome - - Firefox - - Safari - - Edge - - Opera - - Other (specify in additional info) - validations: - required: true - - - type: dropdown - id: os - attributes: - label: Operating System - description: Which operating system are you using? - options: - - Windows - - macOS - - Linux - - Other (specify in additional info) - validations: - required: true - - - type: textarea - attributes: - label: Bug Description - description: | - Describe the bug, how to reproduce it, and any additional context that would help us fix it. Include screenshots when possible. - - **For request-related issues:** Please specify which interceptor you're using (Browser, Agent, Extension, Proxy, Native, etc.) - placeholder: | - ## What happened? - When I do , happens and I see the error: - ``` - [paste error message here] - ``` - What I expected is - - ## Steps to reproduce - 1. Go to '...' - 2. Click on '....' - 3. See error - - ## Screenshots - [Attach screenshots here if available - they're really helpful!] - - ## Additional context - Interceptor used (if request-related): [Browser/Agent/Extension/Proxy/Native/etc.] - - ## Logs and Console Output (if available) - ``` - Paste any relevant logs here - ``` - - ## Additional details (if relevant) - - Device specifics: - - Special configurations: - validations: - required: true - - - type: dropdown - id: deployment - attributes: - label: Deployment Type - description: What type of Hoppscotch deployment are you using? - options: - - Hoppscotch Cloud - - Self-hosted (on-prem deployment) - validations: - required: true - - - type: input - id: version - attributes: - label: Version - description: | - For Self-Hosted deployments: Specify your deployment version - For Desktop App: Specify your app version - validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/--feature-request.yaml b/.github/ISSUE_TEMPLATE/--feature-request.yaml deleted file mode 100644 index 9baddac7..00000000 --- a/.github/ISSUE_TEMPLATE/--feature-request.yaml +++ /dev/null @@ -1,28 +0,0 @@ -name: Feature request -description: Suggest a feature to improve Hoppscotch -title: "[feature]: " -labels: [feature] -body: -- type: markdown - attributes: - value: | - Thank you for taking the time to request a feature for Hoppscotch -- type: checkboxes - attributes: - label: Is there an existing issue for this? - description: Please search to see if an issue related to this feature request already exists - options: - - label: I have searched the existing issues - required: true -- type: textarea - attributes: - label: Summary - description: One paragraph description of the feature - validations: - required: true -- type: textarea - attributes: - label: Why should this be worked on? - description: A concise description of the problems or use cases for this feature request - validations: - required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 83bb3b57..00000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,7 +0,0 @@ -contact_links: - - name: Help and support - url: https://github.com/hoppscotch/hoppscotch#support - about: Reach out to us on our Discord server or Telegram group or GitHub discussions. - - name: Dedicated support - url: mailto:support@hoppscotch.io - about: Write to us if you'd like dedicated support using Hoppscotch diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 60864654..00000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,10 +0,0 @@ -version: 2 -updates: -- package-ecosystem: npm - directory: "/" - schedule: - interval: weekly - time: '00:00' - open-pull-requests-limit: 0 - reviewers: - - liyasthomas diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 6c6eacd4..00000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,21 +0,0 @@ - - - -Closes # - - - -### What's changed - - - - -### Notes to reviewers - diff --git a/.github/semantic.yml b/.github/semantic.yml deleted file mode 100644 index 40b69276..00000000 --- a/.github/semantic.yml +++ /dev/null @@ -1,5 +0,0 @@ -# Always validate the PR title AND all the commits -titleAndCommits: true -# Allows use of Merge commits (eg on github: "Merge branch 'master' into feature/ride-unicorns") -# this is only relevant when using commitsOnly: true (or titleAndCommits: true) -allowMergeCommits: true diff --git a/.github/workflows/build-hoppscotch-agent.yml b/.github/workflows/build-hoppscotch-agent.yml deleted file mode 100644 index 0b935afb..00000000 --- a/.github/workflows/build-hoppscotch-agent.yml +++ /dev/null @@ -1,670 +0,0 @@ -name: Build Agent Self Host - AIO -on: - workflow_dispatch: - inputs: - version: - description: Tag of the version to build - required: true - branch: - description: Branch to checkout - required: true - default: "main" - release_notes: - description: Release notes for the update - required: false - default: "PLACEHOLDER RELEASE NOTES" - build_macos_x64: - description: Build for macOS x64 - type: boolean - required: false - default: true - build_macos_arm64: - description: Build for macOS ARM64 - type: boolean - required: false - default: true - build_linux_deb: - description: Build Linux DEB package - type: boolean - required: false - default: true - build_linux_appimage: - description: Build Linux AppImage - type: boolean - required: false - default: true - build_windows_installer: - description: Build Windows MSI installer - type: boolean - required: false - default: true - build_windows_portable: - description: Build Windows portable executable - type: boolean - required: false - default: true -env: - CARGO_TERM_COLOR: always -jobs: - build-macos-x86_64: - name: Build MacOS x86_64 (.dmg) - runs-on: macos-latest - if: ${{ inputs.build_macos_x64 }} - defaults: - run: - shell: bash - timeout-minutes: 60 - steps: - - name: Checkout hoppscotch/hoppscotch - uses: actions/checkout@v3 - with: - repository: hoppscotch/hoppscotch - ref: ${{ inputs.branch }} - token: ${{ secrets.HOPPSCOTCH_GITHUB_CHECKOUT_TOKEN }} - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 10.15.0 - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - name: Install Rust target - timeout-minutes: 5 - run: rustup target add x86_64-apple-darwin - - name: Install additional tools - timeout-minutes: 5 - run: | - mkdir __dist/ - cd __dist/ - curl -LO "https://github.com/tauri-apps/tauri/releases/download/tauri-cli-v2.0.1/cargo-tauri-x86_64-apple-darwin.zip" - unzip cargo-tauri-x86_64-apple-darwin.zip - chmod +x cargo-tauri - sudo mv cargo-tauri /usr/local/bin/tauri - - name: Import Code-Signing Certificates - uses: apple-actions/import-codesign-certs@v3 - with: - p12-file-base64: ${{ secrets.HOPPSCOTCH_APPLE_CERTIFICATE }} - p12-password: ${{ secrets.HOPPSCOTCH_APPLE_CERTIFICATE_PASSWORD }} - keychain-password: ${{ secrets.KEYCHAIN_PASSWORD }} - - name: Cache Rust dependencies - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-x86-${{ hashFiles('**/Cargo.lock') }} - - name: Install dependencies - timeout-minutes: 15 - run: | - cd packages/hoppscotch-agent - pnpm install --filter hoppscotch-agent - - name: Build Tauri app - timeout-minutes: 30 - 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.HOPPSCOTCH_APPLE_ID }} - APPLE_PASSWORD: ${{ secrets.HOPPSCOTCH_APPLE_PASSWORD }} - APPLE_TEAM_ID: ${{ secrets.HOPPSCOTCH_APPLE_TEAM_ID }} - APPLE_SIGNING_IDENTITY: ${{ secrets.HOPPSCOTCH_APPLE_SIGNING_IDENTITY }} - run: | - cd packages/hoppscotch-agent - echo "Starting x86_64 build..." - pnpm tauri build --verbose --target x86_64-apple-darwin - echo "Build completed" - - name: Prepare artifacts - run: | - mkdir -p artifacts/{sigs,updaters,shas} - 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/updaters/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 - - name: Generate checksums - timeout-minutes: 2 - run: | - cd artifacts - for file in *; do - if [ -f "$file" ]; then - shasum -a 256 "$file" > "shas/${file}.sha256" - fi - done - cd updaters - 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-macos-x86_64 - path: artifacts/* - build-macos-aarch64: - name: Build MacOS ARM64 (.dmg) - runs-on: macos-latest - if: ${{ inputs.build_macos_arm64 }} - defaults: - run: - shell: bash - timeout-minutes: 60 - steps: - - name: Checkout hoppscotch/hoppscotch - uses: actions/checkout@v3 - with: - repository: hoppscotch/hoppscotch - ref: ${{ inputs.branch }} - token: ${{ secrets.HOPPSCOTCH_GITHUB_CHECKOUT_TOKEN }} - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 10.15.0 - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - name: Install Rust target - timeout-minutes: 5 - run: rustup target add aarch64-apple-darwin - - name: Install additional tools - timeout-minutes: 5 - run: | - 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: Import Code-Signing Certificates - uses: apple-actions/import-codesign-certs@v3 - with: - p12-file-base64: ${{ secrets.HOPPSCOTCH_APPLE_CERTIFICATE }} - p12-password: ${{ secrets.HOPPSCOTCH_APPLE_CERTIFICATE_PASSWORD }} - keychain-password: ${{ secrets.KEYCHAIN_PASSWORD }} - - name: Cache Rust dependencies - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-arm-${{ hashFiles('**/Cargo.lock') }} - - name: Install dependencies - timeout-minutes: 15 - run: | - cd packages/hoppscotch-agent - pnpm install --filter hoppscotch-agent - - name: Build Tauri app - timeout-minutes: 30 - 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.HOPPSCOTCH_APPLE_ID }} - APPLE_PASSWORD: ${{ secrets.HOPPSCOTCH_APPLE_PASSWORD }} - APPLE_TEAM_ID: ${{ secrets.HOPPSCOTCH_APPLE_TEAM_ID }} - APPLE_SIGNING_IDENTITY: ${{ secrets.HOPPSCOTCH_APPLE_SIGNING_IDENTITY }} - run: | - cd packages/hoppscotch-agent - echo "Starting ARM64 build..." - pnpm tauri build --verbose --target aarch64-apple-darwin - echo "Build completed" - - name: Prepare artifacts - run: | - mkdir -p artifacts/{sigs,updaters,shas} - 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/updaters/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 - - name: Generate checksums - timeout-minutes: 2 - run: | - cd artifacts - for file in *; do - if [ -f "$file" ]; then - shasum -a 256 "$file" > "shas/${file}.sha256" - fi - done - cd updaters - 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-macos-arm64 - path: artifacts/* - build-linux-deb: - name: Build Linux x86_64 (.deb) - runs-on: ubuntu-22.04 - if: ${{ inputs.build_linux_deb }} - defaults: - run: - shell: bash - timeout-minutes: 60 - steps: - - name: Checkout hoppscotch/hoppscotch - uses: actions/checkout@v3 - with: - repository: hoppscotch/hoppscotch - ref: ${{ inputs.branch }} - token: ${{ secrets.HOPPSCOTCH_GITHUB_CHECKOUT_TOKEN }} - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 10.15.0 - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - name: Install system dependencies - timeout-minutes: 5 - 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: Install additional tools - timeout-minutes: 5 - run: | - 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 - - 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: Cache Rust dependencies - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - name: Install dependencies - timeout-minutes: 15 - run: | - cd packages/hoppscotch-agent - pnpm install --filter hoppscotch-agent - - name: Build Tauri app - timeout-minutes: 30 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} - TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} - run: | - cd packages/hoppscotch-agent - pnpm tauri build --verbose -b deb -b updater - - name: Prepare artifacts - run: | - mkdir -p artifacts/{sigs,shas} - mv packages/hoppscotch-agent/src-tauri/target/release/bundle/deb/*.deb artifacts/Hoppscotch_Agent_linux_x64.deb - - name: Generate checksums - run: | - cd artifacts - for file in *; do - if [ -f "$file" ]; then - sha256sum "$file" > "shas/${file}.sha256" - fi - done - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: Hoppscotch_Agent-linux-deb - path: artifacts/* - build-linux-appimage: - name: Build Linux x86_64 (.AppImage) - runs-on: ubuntu-22.04 - if: ${{ inputs.build_linux_appimage }} - defaults: - run: - shell: bash - timeout-minutes: 60 - steps: - - name: Checkout hoppscotch/hoppscotch - uses: actions/checkout@v3 - with: - repository: hoppscotch/hoppscotch - ref: ${{ inputs.branch }} - token: ${{ secrets.HOPPSCOTCH_GITHUB_CHECKOUT_TOKEN }} - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 10.15.0 - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - name: Install system dependencies - timeout-minutes: 5 - 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: Install additional tools - timeout-minutes: 5 - run: | - 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 - - 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: Cache Rust dependencies - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - name: Install dependencies - timeout-minutes: 15 - run: | - cd packages/hoppscotch-agent - pnpm install --filter hoppscotch-agent - - name: Build Tauri app - timeout-minutes: 30 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} - TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} - run: | - cd packages/hoppscotch-agent - pnpm tauri build --verbose -b appimage -b updater - - name: Prepare artifacts - run: | - mkdir -p artifacts/{sigs,shas} - 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 - - name: Generate checksums - run: | - cd artifacts - for file in *; do - if [ -f "$file" ]; then - sha256sum "$file" > "shas/${file}.sha256" - fi - done - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: Hoppscotch_Agent-linux-appimage - path: artifacts/* - build-windows-installer: - name: Build Windows x86_64 (.msi) - runs-on: windows-latest - if: ${{ inputs.build_windows_installer }} - defaults: - run: - shell: bash - timeout-minutes: 60 - steps: - - name: Checkout hoppscotch/hoppscotch - uses: actions/checkout@v3 - with: - repository: hoppscotch/hoppscotch - ref: ${{ inputs.branch }} - token: ${{ secrets.HOPPSCOTCH_GITHUB_CHECKOUT_TOKEN }} - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 10.15.0 - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - name: Download trusted-signing-cli - shell: pwsh - run: | - $ProgressPreference = 'SilentlyContinue' - Invoke-WebRequest -Uri "https://github.com/Levminer/trusted-signing-cli/releases/download/0.8.0/trusted-signing-cli.exe" -OutFile "trusted-signing-cli.exe" - Move-Item -Path "trusted-signing-cli.exe" -Destination "$env:GITHUB_WORKSPACE\trusted-signing-cli.exe" - echo "$env:GITHUB_WORKSPACE" | Out-File -FilePath $env:GITHUB_PATH -Append -Encoding utf8 - - name: Setting up Windows Environment - timeout-minutes: 20 - 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 - 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' - - name: Cache Rust dependencies - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - name: Install dependencies - timeout-minutes: 15 - shell: bash - run: | - cd packages/hoppscotch-agent - pnpm install --filter hoppscotch-agent - - name: Build Tauri app - timeout-minutes: 30 - 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 - pnpm tauri build --verbose -b msi -b updater - - name: Prepare artifacts - shell: bash - run: | - mkdir -p artifacts/{sigs,shas} - 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 - - name: Generate checksums - shell: powershell - run: | - cd artifacts - Get-ChildItem -File | ForEach-Object { - $hash = Get-FileHash -Algorithm SHA256 $_.Name - $hash.Hash + " " + $_.Name | Out-File -Encoding UTF8 "shas/$($_.Name).sha256" - } - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: Hoppscotch_Agent-windows-installer - path: artifacts/* - build-windows-portable: - name: Build Windows x86_64 Portable - runs-on: windows-latest - if: ${{ inputs.build_windows_portable }} - defaults: - run: - shell: bash - timeout-minutes: 60 - steps: - - name: Checkout hoppscotch/hoppscotch - uses: actions/checkout@v3 - with: - repository: hoppscotch/hoppscotch - ref: ${{ inputs.branch }} - token: ${{ secrets.HOPPSCOTCH_GITHUB_CHECKOUT_TOKEN }} - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 10.15.0 - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - name: Download trusted-signing-cli - shell: pwsh - run: | - $ProgressPreference = 'SilentlyContinue' - Invoke-WebRequest -Uri "https://github.com/Levminer/trusted-signing-cli/releases/download/0.8.0/trusted-signing-cli.exe" -OutFile "trusted-signing-cli.exe" - Move-Item -Path "trusted-signing-cli.exe" -Destination "$env:GITHUB_WORKSPACE\trusted-signing-cli.exe" - echo "$env:GITHUB_WORKSPACE" | Out-File -FilePath $env:GITHUB_PATH -Append -Encoding utf8 - - name: Setting up Windows Environment - timeout-minutes: 20 - 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 - 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' - - name: Cache Rust dependencies - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - name: Install dependencies - timeout-minutes: 15 - shell: bash - run: | - cd packages/hoppscotch-agent - pnpm install --filter hoppscotch-agent - - name: Build Tauri app - timeout-minutes: 30 - 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 - pnpm tauri build --verbose --config src-tauri/tauri.portable.conf.json -- --no-default-features --features portable - - name: Sign portable executable - shell: powershell - env: - 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 - trusted-signing-cli -e ${{ secrets.AZURE_ENDPOINT }} -a ${{ secrets.AZURE_CODE_SIGNING_NAME }} -c ${{ secrets.AZURE_CERT_PROFILE_NAME }} "src-tauri/target/release/hoppscotch-agent.exe" - - name: Zip portable executable - shell: powershell - run: | - Compress-Archive -Path "packages/hoppscotch-agent/src-tauri/target/release/hoppscotch-agent.exe" -DestinationPath "packages/hoppscotch-agent/src-tauri/target/release/Hoppscotch_Agent_win_x64_portable.zip" - - name: Prepare artifacts - shell: bash - run: | - mkdir -p artifacts/{sigs,shas} - mv packages/hoppscotch-agent/src-tauri/target/release/Hoppscotch_Agent_win_x64_portable.zip artifacts/Hoppscotch_Agent_win_x64_portable.zip - - name: Generate checksums - shell: powershell - run: | - cd artifacts - Get-ChildItem -File | ForEach-Object { - $hash = Get-FileHash -Algorithm SHA256 $_.Name - $hash.Hash + " " + $_.Name | Out-File -Encoding UTF8 "shas/$($_.Name).sha256" - } - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: Hoppscotch_Agent-windows-portable - path: artifacts/* - create-update-manifest: - name: Create Update Manifest - needs: [build-macos-x86_64, build-macos-aarch64, build-linux-deb, build-linux-appimage, build-windows-installer, build-windows-portable] - runs-on: ubuntu-latest - if: ${{ inputs.build_macos_x64 && inputs.build_macos_arm64 && inputs.build_linux_appimage && inputs.build_windows_installer }} - steps: - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts - - name: List downloaded artifacts - run: find artifacts -type f | sort - - name: Create update manifest - run: | - VERSION="${{ inputs.version }}" - CURRENT_DATE=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ") - - cat > artifacts/hoppscotch-agent-update.json << EOF - { - "version": "${VERSION}", - "notes": "${{ inputs.release_notes }}", - "pub_date": "${CURRENT_DATE}", - "platforms": { - "darwin-x86_64": { - "signature": "$(cat artifacts/Hoppscotch_Agent-macos-x86_64/sigs/Hoppscotch_Agent_mac_update_x64.tar.gz.sig)", - "url": "https://github.com/hoppscotch/agent-releases/releases/download/${VERSION}/Hoppscotch_Agent_mac_update_x64.tar.gz" - }, - "darwin-aarch64": { - "signature": "$(cat artifacts/Hoppscotch_Agent-macos-arm64/sigs/Hoppscotch_Agent_mac_update_aarch64.tar.gz.sig)", - "url": "https://github.com/hoppscotch/agent-releases/releases/download/${VERSION}/Hoppscotch_Agent_mac_update_aarch64.tar.gz" - }, - "linux-x86_64": { - "signature": "$(cat artifacts/Hoppscotch_Agent-linux-appimage/sigs/Hoppscotch_Agent_linux_x64.AppImage.sig)", - "url": "https://github.com/hoppscotch/agent-releases/releases/download/${VERSION}/Hoppscotch_Agent_linux_x64.AppImage" - }, - "windows-x86_64": { - "signature": "$(cat artifacts/Hoppscotch_Agent-windows-installer/sigs/Hoppscotch_Agent_win_x64.msi.sig)", - "url": "https://github.com/hoppscotch/agent-releases/releases/download/${VERSION}/Hoppscotch_Agent_win_x64.msi" - } - } - } - EOF - - name: Upload manifest - uses: actions/upload-artifact@v4 - with: - name: update-manifest - path: artifacts/hoppscotch-agent-update.json diff --git a/.github/workflows/build-hoppscotch-desktop.yml b/.github/workflows/build-hoppscotch-desktop.yml deleted file mode 100644 index 3e5f6570..00000000 --- a/.github/workflows/build-hoppscotch-desktop.yml +++ /dev/null @@ -1,502 +0,0 @@ -name: Build Desktop Self Host - AIO -on: - workflow_dispatch: - inputs: - version: - description: Tag of the version to build - required: true - repository: - description: Repository to checkout - required: false - default: "hoppscotch/hoppscotch" - branch: - description: Branch to checkout - required: true - default: "main" - tag: - description: Tag to checkout (takes precedence over branch if provided) - required: false - default: "" - release_notes: - description: Release notes for the update - required: false - default: "PLACEHOLDER RELEASE NOTES" - disable_signing: - description: Disable executable signing - required: false - type: boolean - default: false - build_linux: - description: Build for Linux - type: boolean - required: false - default: true - build_windows: - description: Build for Windows - type: boolean - required: false - default: true - build_macos_x64: - description: Build for macOS x64 - type: boolean - required: false - default: true - build_macos_arm64: - description: Build for macOS ARM64 - type: boolean - required: false - default: true -env: - CARGO_TERM_COLOR: always - WORKSPACE_PATH: ${{ github.workspace }} - WEB_PATH: ${{ github.workspace }}/packages/hoppscotch-selfhost-web - DESKTOP_PATH: ${{ github.workspace }}/packages/hoppscotch-desktop - BUNDLER_PATH: ${{ github.workspace }}/packages/hoppscotch-desktop/crates/webapp-bundler -jobs: - build-linux: - runs-on: ubuntu-24.04 - if: ${{ inputs.build_linux }} - steps: - - uses: actions/checkout@v3 - with: - repository: ${{ inputs.repository }} - ref: ${{ inputs.tag != '' && inputs.tag || inputs.branch }} - token: ${{ secrets.HOPPSCOTCH_GITHUB_CHECKOUT_TOKEN }} - - uses: actions/setup-node@v3 - with: - node-version: 20 - - uses: pnpm/action-setup@v4 - with: - version: 10.18.3 - - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - override: true - - name: Install additional tools - run: | - curl -LO "https://github.com/tauri-apps/tauri/releases/download/tauri-cli-v2.2.0/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 - - name: Install system dependencies - run: | - sudo apt update; - sudo apt install -y \ - build-essential \ - curl \ - wget \ - file \ - libssl-dev \ - libgtk-3-dev \ - libappindicator3-dev \ - librsvg2-dev; - - sudo apt install -y \ - libwebkit2gtk-4.1-0=2.44.0-2 \ - libwebkit2gtk-4.1-dev=2.44.0-2 \ - libjavascriptcoregtk-4.1-0=2.44.0-2 \ - libjavascriptcoregtk-4.1-dev=2.44.0-2 \ - gir1.2-javascriptcoregtk-4.1=2.44.0-2 \ - gir1.2-webkit2-4.1=2.44.0-2; - - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - name: Setup environment - run: | - if [ ! -z "${{ secrets.ENV_FILE_CONTENT }}" ]; then - echo "${{ secrets.ENV_FILE_CONTENT }}" > ${{ env.WORKSPACE_PATH }}/.env - echo "Created .env file from repository secret" - elif [ -f "${{ env.WORKSPACE_PATH }}/.env" ]; then - echo "Using existing .env file found in repository" - else - cp ${{ env.WORKSPACE_PATH }}/.env.example ${{ env.WORKSPACE_PATH }}/.env - echo "No .env found, copied from .env.example template" - fi - pnpm install --dir ${{ env.DESKTOP_PATH }} - - name: Build web app - run: | - pnpm install --dir ${{ env.WEB_PATH }} - pnpm --dir ${{ env.WEB_PATH }} generate - - name: Build and run webapp-bundler - run: | - cargo build --release --manifest-path ${{ env.BUNDLER_PATH }}/Cargo.toml - ${{ env.BUNDLER_PATH }}/target/release/webapp-bundler \ - --input ${{ env.WEB_PATH }}/dist \ - --output ${{ env.DESKTOP_PATH }}/bundle.zip \ - --manifest ${{ env.DESKTOP_PATH }}/manifest.json - - name: Build AppImage - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} - TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} - RUST_LOG: debug - run: pnpm --dir ${{ env.DESKTOP_PATH }} tauri build --verbose -b appimage -b updater - - name: Build DEB - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} - TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} - RUST_LOG: debug - run: pnpm --dir ${{ env.DESKTOP_PATH }} tauri build --verbose -b deb -b updater - - name: Prepare artifacts - run: | - ls -lahR ${{ env.DESKTOP_PATH }}/src-tauri/target/release/bundle/ - mkdir -p dist - cp ${{ env.DESKTOP_PATH }}/src-tauri/target/release/bundle/appimage/*.AppImage dist/Hoppscotch_SelfHost_linux_x64.AppImage - cp ${{ env.DESKTOP_PATH }}/src-tauri/target/release/bundle/appimage/*.AppImage.sig dist/Hoppscotch_SelfHost_linux_x64.AppImage.sig - cp ${{ env.DESKTOP_PATH }}/src-tauri/target/release/bundle/deb/*.deb dist/Hoppscotch_SelfHost_linux_x64.deb - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: selfhost-desktop-linux - path: dist/* - build-windows: - runs-on: windows-latest - if: ${{ inputs.build_windows }} - steps: - - uses: actions/checkout@v3 - with: - repository: ${{ inputs.repository }} - ref: ${{ inputs.tag != '' && inputs.tag || inputs.branch }} - token: ${{ secrets.HOPPSCOTCH_GITHUB_CHECKOUT_TOKEN }} - - name: Set Perl environment variables - shell: pwsh - run: | - echo "PERL=$((where.exe perl)[0])" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 - echo "OPENSSL_SRC_PERL=$((where.exe perl)[0])" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 - - uses: actions/setup-node@v3 - with: - node-version: 20 - - uses: pnpm/action-setup@v4 - with: - version: 10.18.3 - - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - override: true - - name: Download trusted-signing-cli - if: ${{ inputs.disable_signing != true }} - shell: pwsh - run: | - $ProgressPreference = 'SilentlyContinue' - Invoke-WebRequest -Uri "https://github.com/Levminer/trusted-signing-cli/releases/download/0.8.0/trusted-signing-cli.exe" -OutFile "trusted-signing-cli.exe" - Move-Item -Path "trusted-signing-cli.exe" -Destination "$env:GITHUB_WORKSPACE\trusted-signing-cli.exe" - echo "$env:GITHUB_WORKSPACE" | Out-File -FilePath $env:GITHUB_PATH -Append -Encoding utf8 - - name: Setting up Windows Signing Environment - if: ${{ inputs.disable_signing != true }} - timeout-minutes: 20 - 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: | - cat "${{ env.DESKTOP_PATH }}/src-tauri/tauri.conf.json" | jq '.bundle .windows += { "signCommand": env.WINDOWS_SIGN_COMMAND}' > "${{ env.DESKTOP_PATH }}/src-tauri/temp.json" && mv "${{ env.DESKTOP_PATH }}/src-tauri/temp.json" "${{ env.DESKTOP_PATH }}/src-tauri/tauri.conf.json" - - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - name: Setup environment - shell: pwsh - run: | - if ("${{ secrets.ENV_FILE_CONTENT }}" -ne "") { - "${{ secrets.ENV_FILE_CONTENT }}" | Out-File -FilePath ${{ env.WORKSPACE_PATH }}\.env -Encoding utf8 - Write-Host "Created .env file from repository secret" - } elseif (Test-Path -Path "${{ env.WORKSPACE_PATH }}\.env") { - Write-Host "Using existing .env file found in repository" - } else { - Copy-Item ${{ env.WORKSPACE_PATH }}\.env.example ${{ env.WORKSPACE_PATH }}\.env - Write-Host "No .env found, copied from .env.example template" - } - pnpm install -f --shamefully-hoist --ignore-scripts - pnpm --filter hoppscotch-backend exec prisma generate - pnpm install -f --shamefully-hoist --dir ${{ env.DESKTOP_PATH }} - - name: Build web app - shell: pwsh - run: | - pnpm install --dir ${{ env.WEB_PATH }} - pnpm --dir ${{ env.WEB_PATH }} generate - - name: Build and run webapp-bundler - shell: pwsh - run: | - cargo build --release --manifest-path ${{ env.BUNDLER_PATH }}\Cargo.toml - ${{ env.BUNDLER_PATH }}\target\release\webapp-bundler.exe ` - --input ${{ env.WEB_PATH }}\dist ` - --output ${{ env.DESKTOP_PATH }}\bundle.zip ` - --manifest ${{ env.DESKTOP_PATH }}\manifest.json - - name: Build Tauri app with Azure signing - if: ${{ inputs.disable_signing != true }} - shell: powershell - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} - TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} - AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} - AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} - AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} - RUST_LOG: debug - run: pnpm --dir ${{ env.DESKTOP_PATH }} tauri build --verbose -b msi -b updater - - name: Build Tauri app without Azure signing - if: ${{ inputs.disable_signing == true }} - shell: powershell - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} - TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} - RUST_LOG: debug - run: pnpm --dir ${{ env.DESKTOP_PATH }} tauri build --verbose -b msi -b updater - - name: Prepare artifacts - shell: pwsh - run: | - Get-ChildItem -Recurse ${{ env.DESKTOP_PATH }}\src-tauri\target\release\bundle - mkdir dist - Copy-Item ${{ env.DESKTOP_PATH }}\src-tauri\target\release\bundle\msi\*_x64_en-US.msi dist\Hoppscotch_SelfHost_win_x64.msi - Copy-Item ${{ env.DESKTOP_PATH }}\src-tauri\target\release\bundle\msi\*_x64_en-US.msi.sig dist\Hoppscotch_SelfHost_win_x64.msi.sig - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: selfhost-desktop-windows - path: dist/* - build-macos-x64: - runs-on: macos-latest - if: ${{ inputs.build_macos_x64 }} - steps: - - uses: actions/checkout@v3 - with: - repository: ${{ inputs.repository }} - ref: ${{ inputs.tag != '' && inputs.tag || inputs.branch }} - token: ${{ secrets.HOPPSCOTCH_GITHUB_CHECKOUT_TOKEN }} - - uses: actions/setup-node@v3 - with: - node-version: 20 - - uses: pnpm/action-setup@v4 - with: - version: 10.18.3 - - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - override: true - - name: Install Rust target - run: rustup target add x86_64-apple-darwin - - name: Install additional tools - run: | - mkdir __dist/ - cd __dist/ - curl -LO "https://github.com/tauri-apps/tauri/releases/download/tauri-cli-v2.2.0/cargo-tauri-x86_64-apple-darwin.zip" - unzip cargo-tauri-x86_64-apple-darwin.zip - chmod +x cargo-tauri - sudo mv cargo-tauri /usr/local/bin/tauri - - uses: apple-actions/import-codesign-certs@v3 - if: ${{ inputs.disable_signing != true }} - with: - p12-file-base64: ${{ secrets.HOPPSCOTCH_APPLE_CERTIFICATE }} - p12-password: ${{ secrets.HOPPSCOTCH_APPLE_CERTIFICATE_PASSWORD }} - keychain-password: ${{ secrets.KEYCHAIN_PASSWORD }} - - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-x86_64-${{ hashFiles('**/Cargo.lock') }} - - name: Setup environment - run: | - if [ ! -z "${{ secrets.ENV_FILE_CONTENT }}" ]; then - echo "${{ secrets.ENV_FILE_CONTENT }}" > ${{ env.WORKSPACE_PATH }}/.env - echo "Created .env file from repository secret" - elif [ -f "${{ env.WORKSPACE_PATH }}/.env" ]; then - echo "Using existing .env file found in repository" - else - cp ${{ env.WORKSPACE_PATH }}/.env.example ${{ env.WORKSPACE_PATH }}/.env - echo "No .env found, copied from .env.example template" - fi - pnpm install --dir ${{ env.DESKTOP_PATH }} - - name: Build web app - run: | - pnpm install --dir ${{ env.WEB_PATH }} - pnpm --dir ${{ env.WEB_PATH }} generate - - name: Build and run webapp-bundler - run: | - cargo build --release --manifest-path ${{ env.BUNDLER_PATH }}/Cargo.toml - ${{ env.BUNDLER_PATH }}/target/release/webapp-bundler \ - --input ${{ env.WEB_PATH }}/dist \ - --output ${{ env.DESKTOP_PATH }}/bundle.zip \ - --manifest ${{ env.DESKTOP_PATH }}/manifest.json - - name: Build Tauri app with Apple signing - if: ${{ inputs.disable_signing != true }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} - TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} - APPLE_ID: ${{ secrets.HOPPSCOTCH_APPLE_ID }} - APPLE_PASSWORD: ${{ secrets.HOPPSCOTCH_APPLE_PASSWORD }} - APPLE_TEAM_ID: ${{ secrets.HOPPSCOTCH_APPLE_TEAM_ID }} - APPLE_SIGNING_IDENTITY: ${{ secrets.HOPPSCOTCH_APPLE_SIGNING_IDENTITY }} - RUST_LOG: debug - run: pnpm --dir ${{ env.DESKTOP_PATH }} tauri build --verbose --target x86_64-apple-darwin - - name: Build Tauri app without Apple signing - if: ${{ inputs.disable_signing == true }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} - TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} - RUST_LOG: debug - run: pnpm --dir ${{ env.DESKTOP_PATH }} tauri build --verbose --target x86_64-apple-darwin - - name: Prepare artifacts - run: | - ls -lahR ${{ env.DESKTOP_PATH }}/src-tauri/target/x86_64-apple-darwin/release/bundle/ - mkdir -p dist - cp ${{ env.DESKTOP_PATH }}/src-tauri/target/x86_64-apple-darwin/release/bundle/dmg/*.dmg dist/Hoppscotch_SelfHost_mac_x64.dmg - cp ${{ env.DESKTOP_PATH }}/src-tauri/target/x86_64-apple-darwin/release/bundle/macos/Hoppscotch.app.tar.gz dist/Hoppscotch_SelfHost_mac_x64.tar.gz - cp ${{ env.DESKTOP_PATH }}/src-tauri/target/x86_64-apple-darwin/release/bundle/macos/Hoppscotch.app.tar.gz.sig dist/Hoppscotch_SelfHost_mac_x64.tar.gz.sig - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: selfhost-desktop-macos-x64 - path: dist/* - build-macos-arm64: - runs-on: macos-latest - if: ${{ inputs.build_macos_arm64 }} - steps: - - uses: actions/checkout@v3 - with: - repository: ${{ inputs.repository }} - ref: ${{ inputs.tag != '' && inputs.tag || inputs.branch }} - token: ${{ secrets.HOPPSCOTCH_GITHUB_CHECKOUT_TOKEN }} - - uses: actions/setup-node@v3 - with: - node-version: 20 - - uses: pnpm/action-setup@v4 - with: - version: 10.18.3 - - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - override: true - - name: Install Rust target - run: rustup target add aarch64-apple-darwin - - name: Install additional tools - run: | - mkdir __dist/ - cd __dist/ - curl -LO "https://github.com/tauri-apps/tauri/releases/download/tauri-cli-v2.2.0/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 - - uses: apple-actions/import-codesign-certs@v3 - if: ${{ inputs.disable_signing != true }} - with: - p12-file-base64: ${{ secrets.HOPPSCOTCH_APPLE_CERTIFICATE }} - p12-password: ${{ secrets.HOPPSCOTCH_APPLE_CERTIFICATE_PASSWORD }} - keychain-password: ${{ secrets.KEYCHAIN_PASSWORD }} - - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-aarch64-${{ hashFiles('**/Cargo.lock') }} - - name: Setup environment - run: | - if [ ! -z "${{ secrets.ENV_FILE_CONTENT }}" ]; then - echo "${{ secrets.ENV_FILE_CONTENT }}" > ${{ env.WORKSPACE_PATH }}/.env - echo "Created .env file from repository secret" - elif [ -f "${{ env.WORKSPACE_PATH }}/.env" ]; then - echo "Using existing .env file found in repository" - else - cp ${{ env.WORKSPACE_PATH }}/.env.example ${{ env.WORKSPACE_PATH }}/.env - echo "No .env found, copied from .env.example template" - fi - pnpm install --dir ${{ env.DESKTOP_PATH }} - - name: Build web app - run: | - pnpm install --dir ${{ env.WEB_PATH }} - pnpm --dir ${{ env.WEB_PATH }} generate - - name: Build and run webapp-bundler - run: | - cargo build --release --manifest-path ${{ env.BUNDLER_PATH }}/Cargo.toml - ${{ env.BUNDLER_PATH }}/target/release/webapp-bundler \ - --input ${{ env.WEB_PATH }}/dist \ - --output ${{ env.DESKTOP_PATH }}/bundle.zip \ - --manifest ${{ env.DESKTOP_PATH }}/manifest.json - - name: Build Tauri app with Apple signing - if: ${{ inputs.disable_signing != true }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} - TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} - APPLE_ID: ${{ secrets.HOPPSCOTCH_APPLE_ID }} - APPLE_PASSWORD: ${{ secrets.HOPPSCOTCH_APPLE_PASSWORD }} - APPLE_TEAM_ID: ${{ secrets.HOPPSCOTCH_APPLE_TEAM_ID }} - APPLE_SIGNING_IDENTITY: ${{ secrets.HOPPSCOTCH_APPLE_SIGNING_IDENTITY }} - RUST_LOG: debug - run: pnpm --dir ${{ env.DESKTOP_PATH }} tauri build --verbose --target aarch64-apple-darwin - - name: Build Tauri app without Apple signing - if: ${{ inputs.disable_signing == true }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} - TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} - RUST_LOG: debug - run: pnpm --dir ${{ env.DESKTOP_PATH }} tauri build --verbose --target aarch64-apple-darwin - - name: Prepare artifacts - run: | - ls -lahR ${{ env.DESKTOP_PATH }}/src-tauri/target/aarch64-apple-darwin/release/bundle/ - mkdir -p dist - cp ${{ env.DESKTOP_PATH }}/src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/*.dmg dist/Hoppscotch_SelfHost_mac_aarch64.dmg - cp ${{ env.DESKTOP_PATH }}/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/Hoppscotch.app.tar.gz dist/Hoppscotch_SelfHost_mac_aarch64.tar.gz - cp ${{ env.DESKTOP_PATH }}/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/Hoppscotch.app.tar.gz.sig dist/Hoppscotch_SelfHost_mac_aarch64.tar.gz.sig - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: selfhost-desktop-macos-aarch64 - path: dist/* - create-update-manifest: - needs: [build-linux, build-windows, build-macos-x64, build-macos-arm64] - runs-on: ubuntu-latest - if: ${{ inputs.build_linux && inputs.build_windows && inputs.build_macos_x64 && inputs.build_macos_arm64 }} - steps: - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts - - name: Create update manifest - run: | - VERSION="${{ inputs.version }}" - CURRENT_DATE=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ") - - cat > artifacts/hoppscotch-selfhost-desktop.json << EOF - { - "version": "${VERSION}", - "notes": "${{ inputs.release_notes }}", - "pub_date": "${CURRENT_DATE}", - "platforms": { - "linux-x86_64": { - "signature": "$(cat artifacts/selfhost-desktop-linux/Hoppscotch_SelfHost_linux_x64.AppImage.sig)", - "url": "https://github.com/hoppscotch/releases/releases/download/${VERSION}/Hoppscotch_SelfHost_linux_x64.AppImage" - }, - "windows-x86_64": { - "signature": "$(cat artifacts/selfhost-desktop-windows/Hoppscotch_SelfHost_win_x64.msi.sig)", - "url": "https://github.com/hoppscotch/releases/releases/download/${VERSION}/Hoppscotch_SelfHost_win_x64.msi" - }, - "darwin-x86_64": { - "signature": "$(cat artifacts/selfhost-desktop-macos-x64/Hoppscotch_SelfHost_mac_x64.tar.gz.sig)", - "url": "https://github.com/hoppscotch/releases/releases/download/${VERSION}/Hoppscotch_SelfHost_mac_x64.tar.gz" - }, - "darwin-aarch64": { - "signature": "$(cat artifacts/selfhost-desktop-macos-aarch64/Hoppscotch_SelfHost_mac_aarch64.tar.gz.sig)", - "url": "https://github.com/hoppscotch/releases/releases/download/${VERSION}/Hoppscotch_SelfHost_mac_aarch64.tar.gz" - } - } - } - EOF - - name: Upload manifest - uses: actions/upload-artifact@v4 - with: - name: selfhost-desktop-update-manifest - path: artifacts/hoppscotch-selfhost-desktop.json diff --git a/.github/workflows/release-push-docker.yml b/.github/workflows/release-push-docker.yml deleted file mode 100644 index c7e3ef50..00000000 --- a/.github/workflows/release-push-docker.yml +++ /dev/null @@ -1,182 +0,0 @@ -name: "Push containers to Docker Hub on release" - -on: - push: - tags: - - '*.*.*' - workflow_dispatch: - inputs: - # NO INPUTS - -jobs: - build: - strategy: - matrix: - platform: [ - { platform: linux/amd64, cache: docker-release-amd64, artifactSuffix: amd64 }, - { platform: linux/arm64, cache: docker-release-arm64, artifactSuffix: arm64 }, - ] - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup environment - run: cp .env.example .env - - - name: Setup QEMU - uses: docker/setup-qemu-action@v3 - - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Build and push the backend container by digest - id: backend-build - uses: docker/build-push-action@v4 - with: - context: . - file: ./prod.Dockerfile - target: backend - cache-from: type=gha,timeout=200m,scope=${{ matrix.platform.cache }} - cache-to: type=gha,mode=max,timeout=200m,scope=${{ matrix.platform.cache }} - platforms: | - ${{ matrix.platform.platform }} - tags: | - ${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_BACKEND_CONTAINER_NAME }} - outputs: type=image,push-by-digest=true,name-canonical=true,push=true - - - name: Build and push the frontend container by digest - id: frontend-build - uses: docker/build-push-action@v4 - with: - context: . - file: ./prod.Dockerfile - target: app - cache-from: type=gha,timeout=200m,scope=${{ matrix.platform.cache }} - cache-to: type=gha,mode=max,timeout=200m,scope=${{ matrix.platform.cache }} - platforms: | - ${{ matrix.platform.platform }} - tags: | - ${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_FRONTEND_CONTAINER_NAME }} - outputs: type=image,push-by-digest=true,name-canonical=true,push=true - - - name: Build and push the admin dashboard container by digest - id: sh_admin-build - uses: docker/build-push-action@v4 - with: - context: . - file: ./prod.Dockerfile - target: sh_admin - cache-from: type=gha,timeout=200m,scope=${{ matrix.platform.cache }} - cache-to: type=gha,mode=max,timeout=200m,scope=${{ matrix.platform.cache }} - platforms: | - ${{ matrix.platform.platform }} - tags: | - ${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_SH_ADMIN_CONTAINER_NAME }} - outputs: type=image,push-by-digest=true,name-canonical=true,push=true - - - name: Build and push the AIO container by digest - id: aio-build - uses: docker/build-push-action@v4 - with: - context: . - file: ./prod.Dockerfile - target: aio - cache-from: type=gha,timeout=200m,scope=${{ matrix.platform.cache }} - cache-to: type=gha,mode=max,timeout=200m,scope=${{ matrix.platform.cache }} - platforms: | - ${{ matrix.platform.platform }} - tags: | - ${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_AIO_CONTAINER_NAME }} - outputs: type=image,push-by-digest=true,name-canonical=true,push=true - - - name: Make digest files - run: | - backend_digest="${{ steps.backend-build.outputs.digest }}" - frontend_digest="${{ steps.frontend-build.outputs.digest }}" - sh_admin_digest="${{ steps.sh_admin-build.outputs.digest }}" - aio_digest="${{ steps.aio-build.outputs.digest }}" - - mkdir -p digests/backend digests/frontend digests/sh_admin digests/aio - - touch "digests/backend/${backend_digest#sha256:}" - touch "digests/frontend/${frontend_digest#sha256:}" - touch "digests/sh_admin/${sh_admin_digest#sha256:}" - touch "digests/aio/${aio_digest#sha256:}" - - - name: Upload digests files as artifacts - uses: actions/upload-artifact@v4 - with: - name: release-docker-build-digests-${{ github.ref_name }}-${{ matrix.platform.artifactSuffix }} - path: digests/* - if-no-files-found: error - retention-days: 1 - - assemble-and-push-to-docker-hub: - runs-on: ubuntu-latest - needs: - - build - steps: - - name: Download digests from artifacts - uses: actions/download-artifact@v4 - with: - path: digests - pattern: release-docker-build-digests-${{ github.ref_name }}-* - merge-multiple: true - - - name: Setup QEMU - uses: docker/setup-qemu-action@v3 - - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: "[Backend] - Create manifest list and push" - working-directory: digests/backend - run: | - docker buildx imagetools create -t ${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_BACKEND_CONTAINER_NAME }}:${{ github.ref_name }} \ - $(printf '${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_BACKEND_CONTAINER_NAME }}@sha256:%s ' *) - - docker buildx imagetools create -t ${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_BACKEND_CONTAINER_NAME }}:latest \ - $(printf '${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_BACKEND_CONTAINER_NAME }}@sha256:%s ' *) - - - - name: "[Frontend] - Create manifest list and push" - working-directory: digests/frontend - run: | - docker buildx imagetools create -t ${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_FRONTEND_CONTAINER_NAME }}:${{ github.ref_name }} \ - $(printf '${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_FRONTEND_CONTAINER_NAME }}@sha256:%s ' *) - - docker buildx imagetools create -t ${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_FRONTEND_CONTAINER_NAME }}:latest \ - $(printf '${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_FRONTEND_CONTAINER_NAME }}@sha256:%s ' *) - - - - name: "[SH Admin] - Create manifest list and push" - working-directory: digests/sh_admin - run: | - docker buildx imagetools create -t ${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_SH_ADMIN_CONTAINER_NAME }}:${{ github.ref_name }} \ - $(printf '${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_SH_ADMIN_CONTAINER_NAME }}@sha256:%s ' *) - - docker buildx imagetools create -t ${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_SH_ADMIN_CONTAINER_NAME }}:latest \ - $(printf '${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_SH_ADMIN_CONTAINER_NAME }}@sha256:%s ' *) - - - name: "[AIO] - Create manifest list and push" - working-directory: digests/aio - run: | - docker buildx imagetools create -t ${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_AIO_CONTAINER_NAME }}:${{ github.ref_name }} \ - $(printf '${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_AIO_CONTAINER_NAME }}@sha256:%s ' *) - - docker buildx imagetools create -t ${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_AIO_CONTAINER_NAME }}:latest \ - $(printf '${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_AIO_CONTAINER_NAME }}@sha256:%s ' *) - diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml deleted file mode 100644 index 56d67b54..00000000 --- a/.github/workflows/tests.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Node.js CI - -on: - push: - branches: [main, next, patch] - pull_request: - branches: [main, next, patch] - -jobs: - test: - name: Test - runs-on: ubuntu-latest - - strategy: - matrix: - # Pinned to Node.js 22 due to known test failures on Node.js 24. - # Future TODO: Investigate test failures and move to Node.js 24 (Active LTS). - node-version: [22] - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup environment - run: mv .env.example .env - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 10 - run_install: false - - - name: Install dependencies - run: pnpm install - env: - DATABASE_URL: postgresql://postgres:testpass@localhost:5432/hoppscotch - DATA_ENCRYPTION_KEY: "12345678901234567890123456789012" - - - name: Run tests - run: pnpm test