name: Release Edge on: push: branches: - main paths-ignore: - "**/*.md" - "**/*.mdx" - "**/*.txt" - "**/*.rst" - "**/*.adoc" workflow_dispatch: jobs: prepare_edge_release: name: Prepare edge release runs-on: ubuntu-latest permissions: contents: write steps: - name: Checkout source uses: actions/checkout@v5.0.1 with: fetch-depth: 0 - name: Force-update edge tag run: | git tag -f edge "$GITHUB_SHA" git push origin refs/tags/edge --force build_release: name: Build edge ${{ matrix.asset_name }} needs: prepare_edge_release runs-on: ${{ matrix.runner }} permissions: contents: write strategy: fail-fast: false matrix: include: - runner: ubuntu-latest asset_name: omnigraph-linux-x86_64 - runner: macos-14 asset_name: omnigraph-macos-arm64 - runner: windows-latest asset_name: omnigraph-windows-x86_64 env: CARGO_TERM_COLOR: always steps: - name: Checkout source uses: actions/checkout@v5.0.1 - name: Install Linux dependencies if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y protobuf-compiler libprotobuf-dev - name: Install macOS dependencies if: runner.os == 'macOS' run: brew install protobuf - name: Install Windows dependencies if: runner.os == 'Windows' run: choco install protoc -y - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: toolchain: stable - name: Cache Rust build data uses: Swatinem/rust-cache@v2 with: workspaces: | . -> target - name: Build release binaries run: cargo build --release --locked -p omnigraph-cli -p omnigraph-server - name: Package Unix release archive if: runner.os != 'Windows' run: | mkdir -p release install -m 0755 target/release/omnigraph release/omnigraph install -m 0755 target/release/omnigraph-server release/omnigraph-server tar -C release -czf "${{ matrix.asset_name }}.tar.gz" omnigraph omnigraph-server shasum -a 256 "${{ matrix.asset_name }}.tar.gz" > "${{ matrix.asset_name }}.sha256" - name: Package Windows release archive if: runner.os == 'Windows' run: | New-Item -ItemType Directory -Force -Path release | Out-Null Copy-Item target/release/omnigraph.exe release/omnigraph.exe Copy-Item target/release/omnigraph-server.exe release/omnigraph-server.exe Compress-Archive -Path release/omnigraph.exe, release/omnigraph-server.exe -DestinationPath "${{ matrix.asset_name }}.zip" -Force $hash = (Get-FileHash "${{ matrix.asset_name }}.zip" -Algorithm SHA256).Hash.ToLowerInvariant() "$hash ${{ matrix.asset_name }}.zip" | Out-File -FilePath "${{ matrix.asset_name }}.sha256" -Encoding ascii New-Item -ItemType Directory -Force -Path verify | Out-Null Expand-Archive -Path "${{ matrix.asset_name }}.zip" -DestinationPath verify -Force $items = Get-ChildItem -Path verify -File if ($items.Count -ne 2 -or !(Test-Path verify/omnigraph.exe) -or !(Test-Path verify/omnigraph-server.exe)) { throw "Windows release archive is missing expected binaries" } - name: Publish edge release assets uses: softprops/action-gh-release@v2.5.0 with: tag_name: edge name: Edge prerelease: true make_latest: false body: | Rolling prerelease from `${{ github.sha }}`. files: | ${{ matrix.asset_name }}.* smoke_windows_installer: name: Smoke Windows installer needs: build_release runs-on: windows-latest permissions: contents: read steps: - name: Checkout source uses: actions/checkout@v5.0.1 - name: Install from edge release run: ./scripts/install.ps1 -ReleaseChannel edge -InstallDir "$env:RUNNER_TEMP/omnigraph-bin" - name: Smoke installed binaries run: | & "$env:RUNNER_TEMP/omnigraph-bin/omnigraph.exe" version & "$env:RUNNER_TEMP/omnigraph-bin/omnigraph-server.exe" --help