on: push: tags: - "v*" name: Release env: GITHUB_REF: "${{ github.ref }}" jobs: build_64bit: name: Build artifacts (64-bit) runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] include: - os: ubuntu-latest artifact: x86_64-linux-gnu rust: x86_64-unknown-linux-gnu - os: macos-latest artifact: x86_64-macos rust: x86_64-apple-darwin - os: windows-latest artifact: x86_64-windows rust: x86_64-pc-windows-msvc steps: - uses: actions/checkout@v2 - name: Cache Cargo registry uses: actions/cache@v2 with: path: ~/.cargo/registry key: ${{ matrix.rust }}-cargo-registry-${{ hashFiles('Cargo.lock') }} restore-keys: | ${{ matrix.rust }}-cargo-registry- - name: Cache Cargo index uses: actions/cache@v2 with: path: ~/.cargo/git key: ${{ matrix.rust }}-cargo-index-${{ hashFiles('Cargo.lock') }} restore-keys: | ${{ matrix.rust }}-cargo-index- - name: Cache Cargo build uses: actions/cache@v2 with: path: target key: ${{ matrix.rust }}-target-${{ hashFiles('Cargo.lock') }} restore-keys: | ${{ matrix.rust }}-target- - name: Query version number id: get_version shell: bash run: | echo "using version tag ${GITHUB_REF:10}" echo ::set-output name=version::"${GITHUB_REF:10}" - name: Install Rust run: | rustup default stable rustup target add ${{ matrix.rust }} - name: Make bundle run: make bundle env: RUST_BACKTRACE: 1 TARGET: ${{ matrix.rust }} ARTIFACT: ${{ matrix.artifact }} VERSION: ${{ steps.get_version.outputs.VERSION }} - name: Upload assets uses: actions/upload-artifact@v2 with: name: sky-bundle-${{ steps.get_version.outputs.VERSION }}-${{ matrix.artifact }}.zip path: sky-bundle-${{ steps.get_version.outputs.VERSION }}-${{ matrix.artifact }}.zip build_32bit: name: Build artifacts (32-bit) runs-on: ${{ matrix.os }} strategy: matrix: build: [linux, windows] include: - build: linux os: ubuntu-latest rust: i686-unknown-linux-gnu artifact: i686-linux-gnu - build: windows os: windows-latest artifact: i686-windows rust: i686-pc-windows-msvc steps: - uses: actions/checkout@v2 - name: Cache Cargo registry uses: actions/cache@v2 with: path: ~/.cargo/registry key: ${{ matrix.rust }}-cargo-registry-${{ hashFiles('Cargo.lock') }} restore-keys: | ${{ matrix.rust }}-cargo-registry- - name: Cache Cargo index uses: actions/cache@v2 with: path: ~/.cargo/git key: ${{ matrix.rust }}-cargo-index-${{ hashFiles('Cargo.lock') }} restore-keys: | ${{ matrix.rust }}-cargo-index- - name: Cache Cargo build uses: actions/cache@v2 with: path: target key: ${{ matrix.rust }}-target-${{ hashFiles('Cargo.lock') }} restore-keys: | ${{ matrix.rust }}-target- - name: Query version number id: get_version shell: bash run: | echo "using version tag ${GITHUB_REF:10}" echo ::set-output name=version::"${GITHUB_REF:10}" - name: Install 32-bit tools (Linux) run: sudo apt update && sudo apt install gcc-multilib -y if: runner.os == 'Linux' - name: Install Rust run: rustup target add ${{ matrix.rust }} - name: Make bundle run: make bundle env: RUST_BACKTRACE: 1 TARGET: ${{ matrix.rust }} ARTIFACT: ${{ matrix.artifact }} VERSION: ${{ steps.get_version.outputs.VERSION }} - name: Upload assets uses: actions/upload-artifact@v2 with: name: sky-bundle-${{ steps.get_version.outputs.VERSION }}-${{ matrix.artifact }}.zip path: sky-bundle-${{ steps.get_version.outputs.VERSION }}-${{ matrix.artifact }}.zip build_musl: name: Build Linux x86_64-musl (Tier 2) runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Cache Cargo registry uses: actions/cache@v2 with: path: ~/.cargo/registry key: x86_64-unknown-linux-musl -cargo-registry-${{ hashFiles('Cargo.lock') }} restore-keys: | x86_64-unknown-linux-musl-cargo-registry- - name: Cache Cargo index uses: actions/cache@v2 with: path: ~/.cargo/git key: x86_64-unknown-linux-musl-cargo-index-${{ hashFiles('Cargo.lock') }} restore-keys: | x86_64-unknown-linux-musl-cargo-index- - name: Cache Cargo build uses: actions/cache@v2 with: path: target key: x86_64-unknown-linux-musl-target-${{ hashFiles('Cargo.lock') }} restore-keys: | x86_64-unknown-linux-musl-target- - name: Query version number id: get_version shell: bash run: | echo "using version tag ${GITHUB_REF:10}" echo ::set-output name=version::"${GITHUB_REF:10}" - name: Install MUSL tools run: sudo apt update && sudo apt install musl-tools -y - name: Install Rust run: rustup target add x86_64-unknown-linux-musl - name: Make bundle run: make bundle env: RUST_BACKTRACE: 1 TARGET: x86_64-unknown-linux-musl ARTIFACT: x86_64-linux-musl VERSION: ${{ steps.get_version.outputs.VERSION }} - name: Upload assets uses: actions/upload-artifact@v2 with: name: sky-bundle-${{ steps.get_version.outputs.VERSION }}-x86_64-linux-musl.zip path: sky-bundle-${{ steps.get_version.outputs.VERSION }}-x86_64-linux-musl.zip build-arm64: name: Build artifacts (self-hosted-arm64-native) runs-on: self-hosted steps: - name: Checkout sources uses: actions/checkout@v2 with: fetch-depth: 2 - name: Set up tools run: | sudo apt update && sudo apt install awscli zip zstd -y aws configure set aws_access_key_id ${{ secrets.STORAGE_ACCESS_KEY }} aws configure set aws_secret_access_key ${{ secrets.STORAGE_ACCESS_SECRET }} aws configure set default.s3.signature_version s3v4 - name: Get cache run: | aws --endpoint-url ${{ secrets.STORAGE_ACCESS_URL }} s3 cp --no-progress s3://cache/skytable-linux-arm64-release.tar.zst target.tar.zst tar -I zstd -xf target.tar.zst rm target.tar.zst echo "LASTHASH=$(cat target/LASTHASH 2>/dev/null)" >> $GITHUB_ENV continue-on-error: true - name: Install Rust run: | curl https://sh.rustup.rs -sSf | sh -s -- -y echo $HOME/.cargo/bin >> $GITHUB_PATH - name: Query version number id: get_version shell: bash run: | echo "using version tag ${GITHUB_REF:10}" echo ::set-output name=version::"${GITHUB_REF:10}" - name: Make bundle env: TARGET: aarch64-unknown-linux-gnu VERSION: ${{ steps.get_version.outputs.VERSION }} ARTIFACT: aarch64-linux-gnu run: make bundle - name: Save cache env: NEWHASH: ${{ hashFiles('Cargo.lock') }} LASTHASH: ${{ env.LASTHASH }} run: | if [[ ${NEWHASH} != ${LASTHASH} ]]; then echo "Freshening cache" tar --zstd -cf target.tar.zst target aws --endpoint-url ${{ secrets.STORAGE_ACCESS_URL }} s3 cp --no-progress target.tar.zst s3://cache/skytable-linux-arm64-release.tar.zst echo "Finished freshening cache" else echo "Cache hit occurred. Not saving cache" fi - name: Upload bundle run: | aws --endpoint-url ${{ secrets.STORAGE_ACCESS_URL }} s3 cp sky-bundle-${{ steps.get_version.outputs.VERSION }}-aarch64-linux-gnu.zip s3://releases/${{ steps.get_version.outputs.VERSION }}/ release: name: Release needs: - build_64bit - build_32bit - build_musl - build-arm64 runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Query version number id: get_version shell: bash run: | echo "using version tag ${GITHUB_REF:10}" echo ::set-output name=version::"${GITHUB_REF:10}" - name: Download all artifacts uses: actions/download-artifact@v2 with: path: artifacts - name: Download ARM64 bundle run: | wget https://releases.skytable.io/release/${{ steps.get_version.outputs.VERSION }}/sky-bundle-${{ steps.get_version.outputs.VERSION }}-aarch64-linux-gnu.zip working-directory: artifacts - name: Upload release binaries env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAG_NAME: ${{ steps.get_version.outputs.VERSION }} run: hub release edit $(find . -type f -name "*.zip" -printf "-a %p ") -m "" "$TAG_NAME"