name: Release # Builds Gridline installers for macOS (Apple Silicon + Intel), Windows, and # Linux, then uploads them to a draft GitHub Release. # # Trigger: push a version tag from the `prod` branch (production), e.g. # git checkout prod && git pull # git tag v0.5.0 && git push origin v0.5.0 # # SIGNING STATUS: builds are UNSIGNED for now (no code-signing certs yet — # see README "Download a release"). tauri-action automatically signs + # notarizes when the signing secrets are present, so the moment we add # APPLE_CERTIFICATE / APPLE_API_KEY / WINDOWS_CERTIFICATE (or Azure Trusted # Signing) to repo secrets, future builds are signed — no changes to this # file required. on: push: tags: - 'v*' permissions: contents: write jobs: publish: strategy: fail-fast: false matrix: include: - platform: macos-latest # Apple Silicon (M1/M2/M3+) args: --target aarch64-apple-darwin - platform: macos-15-intel # Intel Macs (last Intel runner; retired ~Aug 2027) args: --target x86_64-apple-darwin - platform: ubuntu-22.04 # Linux x86_64 (.deb / .rpm / .AppImage) args: '' - platform: windows-latest # Windows x86_64 (NSIS .exe + .msi) args: '' runs-on: ${{ matrix.platform }} steps: - name: Checkout uses: actions/checkout@v4 - name: Install Linux dependencies if: matrix.platform == 'ubuntu-22.04' run: | sudo apt-get update sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf - name: Set up Bun uses: oven-sh/setup-bun@v2 - name: Set up Rust uses: dtolnay/rust-toolchain@stable with: targets: aarch64-apple-darwin, x86_64-apple-darwin - name: Cache Rust build artifacts uses: swatinem/rust-cache@v2 with: workspaces: './src-tauri -> target' - name: Install frontend dependencies run: bun install --frozen-lockfile - name: Build PostgreSQL client tools (bundled) shell: bash run: | set -euo pipefail PG_VER="16.4" OUT="src-tauri/resources/pg_tools" mkdir -p "$OUT" case "${{ matrix.platform }}" in ubuntu-22.04) sudo apt-get update -y sudo apt-get install -y build-essential libreadline-dev zlib1g-dev flex bison curl -fsSL "https://ftp.postgresql.org/pub/source/v${PG_VER}/postgresql-${PG_VER}.tar.bz2" -o /tmp/pg.tar.bz2 tar -xf /tmp/pg.tar.bz2 -C /tmp cd /tmp/postgresql-${PG_VER} ./configure --prefix=/tmp/pgbuild --without-readline --without-icu --disable-shared CFLAGS="-O2" make -j"$(nproc)" -C src/bin/pg_dump all make -j"$(nproc)" -C src/bin/psql all cp src/bin/pg_dump/pg_dump src/bin/pg_dump/pg_restore "$OUT"/ cp src/bin/psql/psql "$OUT"/ ;; macos-latest|macos-15-intel) curl -fsSL "https://ftp.postgresql.org/pub/source/v${PG_VER}/postgresql-${PG_VER}.tar.bz2" -o /tmp/pg.tar.bz2 tar -xf /tmp/pg.tar.bz2 -C /tmp cd /tmp/postgresql-${PG_VER} ./configure --prefix=/tmp/pgbuild --without-readline --without-icu --disable-shared CFLAGS="-O2" make -j"$(sysctl -n hw.ncpu)" -C src/bin/pg_dump all make -j"$(sysctl -n hw.ncpu)" -C src/bin/psql all cp src/bin/pg_dump/pg_dump src/bin/pg_dump/pg_restore "$OUT"/ cp src/bin/psql/psql "$OUT"/ ;; windows-latest) URL="https://get.enterprisedb.com/postgresql/postgresql-${PG_VER}-1-windows-x64-binaries.zip" curl -fsSL "$URL" -o /tmp/pg.zip EXPECTED="3508d8f085bc3980f38211a82e3f31e5fcae9952105d3dc2f8be67b64a822baa" echo "$EXPECTED /tmp/pg.zip" | sha256sum -c - sha256sum /tmp/pg.zip unzip -o /tmp/pg.zip -d /tmp/pg cp /tmp/pg/pgsql/bin/pg_dump.exe /tmp/pg/pgsql/bin/pg_restore.exe /tmp/pg/pgsql/bin/psql.exe "$OUT"/ cp /tmp/pg/pgsql/bin/libpq.dll "$OUT"/ ;; esac (cd "$OUT" && sha256sum * | tee checksums.txt) for b in pg_dump pg_restore psql; do f="$OUT/${b}$( [ "${{ matrix.platform }}" = windows-latest ] && echo .exe )" test -f "$f" || { echo "missing $f"; exit 1; } done - name: Build and upload to GitHub Release uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tagName: ${{ github.ref_name }} releaseName: 'Gridline ${{ github.ref_name }}' releaseDraft: true args: ${{ matrix.args }} # Version-free asset names (see README Download section): the README # links via GitHub's releases/latest/download/ redirect, which # only works if filenames are identical across releases. Omitting # [version] gives stable names: Gridline_darwin_aarch64.dmg, # Gridline_windows_x64-setup.exe, Gridline_linux_amd64.deb, etc. releaseAssetNamePattern: '[name]_[platform]_[arch][setup][ext]'