on: push: tags: - "v*.*.*" name: Release env: RUST_TOOLCHAIN: nightly-2023-01-26 jobs: build: name: Build binary strategy: matrix: include: - arch: x86_64-unknown-linux-gnu os: ubuntu-2004-8-cores features: "--features tmpcache,zo_functions" file_name: zincobserve-${{ github.ref_name }}-linux-amd64 file_ext: .tar.gz - arch: aarch64-unknown-linux-gnu os: ubuntu-2004-8-cores features: "--features tmpcache,zo_functions" file_name: zincobserve-${{ github.ref_name }}-linux-arm64 file_ext: .tar.gz - arch: x86_64-apple-darwin os: macos-latest features: "--features tmpcache,zo_functions" file_name: zincobserve-${{ github.ref_name }}-darwin-amd64 file_ext: .tar.gz - arch: aarch64-apple-darwin os: macos-latest features: "--features tmpcache" file_name: zincobserve-${{ github.ref_name }}-darwin-arm64 file_ext: .tar.gz - arch: x86_64-pc-windows-msvc os: windows-latest-8-cores features: "--features zo_functions" file_name: zincobserve-${{ github.ref_name }}-windows-amd64 file_ext: .zip runs-on: ${{ matrix.os }} steps: - name: Checkout sources uses: actions/checkout@v3 - name: Cache cargo assets id: cache uses: actions/cache@v3 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ matrix.arch }}-build-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Install Node uses: actions/setup-node@v3 with: node-version: 18.x cache: 'npm' cache-dependency-path: web/package-lock.json - name: Build UI env: NODE_OPTIONS: "--max-old-space-size=4096" run: | cd web/ npm install npm run build - name: Install Protoc for linux if: contains(matrix.arch, 'linux') && endsWith(matrix.arch, '-gnu') run: | # Make sure the protoc is >= 3.15 wget https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protoc-21.12-linux-x86_64.zip unzip protoc-21.12-linux-x86_64.zip -d protoc sudo cp protoc/bin/protoc /usr/local/bin/ sudo cp -r protoc/include/google /usr/local/include/ - name: Install Protoc for windows if: contains(matrix.arch, 'windows') shell: bash run: | curl -L -o protoc-21.12-win64.zip https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protoc-21.12-win64.zip unzip protoc-21.12-win64.zip -d protoc cp protoc/bin/protoc.exe C:/windows/system32/protoc.exe cp -r protoc/include/google C:/windows/system32/ - name: Install Protoc for macos if: contains(matrix.arch, 'darwin') run: | brew install protobuf - name: Install dependencies for linux if: contains(matrix.arch, 'linux') && endsWith(matrix.arch, '-gnu') run: | sudo apt-get -y update sudo apt-get -y install libssl-dev pkg-config g++-aarch64-linux-gnu gcc-aarch64-linux-gnu musl-dev musl-tools - name: Install rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: ${{ env.RUST_TOOLCHAIN }} target: ${{ matrix.arch }} override: true - name: Output package versions run: protoc --version ; cargo version ; rustc --version ; gcc --version ; g++ --version - name: Run cargo build run: cargo build ${{ matrix.features }} --release --target ${{ matrix.arch }} - name: Calculate checksum and rename binary if: contains(matrix.arch, 'windows') == false shell: bash run: | cd target/${{ matrix.arch }}/release chmod +x zincobserve tar -zcvf ${{ matrix.file_name }}.tar.gz zincobserve echo $(shasum -a 256 ${{ matrix.file_name }}.tar.gz | cut -f1 -d' ') > ${{ matrix.file_name }}.tar.gz.sha256sum - name: Calculate checksum and rename binary for windows if: contains(matrix.arch, 'windows') shell: bash run: | cd target/${{ matrix.arch }}/release 7z a -tzip ${{ matrix.file_name }}.zip zincobserve.exe certutil.exe -hashfile ${{ matrix.file_name }}.zip sha256|head -n 2|tail -n 1 > ${{ matrix.file_name }}.zip.sha256sum - name: Upload artifacts uses: actions/upload-artifact@v3 with: name: ${{ matrix.file_name }} path: target/${{ matrix.arch }}/release/${{ matrix.file_name }}${{ matrix.file_ext }} - name: Upload checksum of artifacts uses: actions/upload-artifact@v3 with: name: ${{ matrix.file_name }}.sha256sum path: target/${{ matrix.arch }}/release/${{ matrix.file_name }}${{ matrix.file_ext }}.sha256sum release: name: Release artifacts needs: [build] runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v3 - name: Download artifacts uses: actions/download-artifact@v3 - name: Publish release uses: softprops/action-gh-release@v1 with: name: "Release ${{ github.ref_name }}" generate_release_notes: true files: | **/zincobserve-*