diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000000..3c32d251c5 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[target.aarch64-unknown-linux-gnu] +linker = "aarch64-linux-gnu-gcc" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..abe6ce821d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,171 @@ +on: + push: + tags: + - "v*.*.*" + +name: Release + +env: + RUST_TOOLCHAIN: nightly-2022-07-14 + +jobs: + build: + name: Build binary + strategy: + matrix: + # The file format is greptime-.- + include: + - arch: x86_64-unknown-linux-gnu + os: ubuntu-latest + file: greptime-${{ github.ref_name }}.linux-amd64 + - arch: aarch64-unknown-linux-gnu + os: ubuntu-latest + file: greptime-${{ github.ref_name }}.linux-arm64 + - arch: aarch64-apple-darwin + os: macos-latest + file: greptime-${{ github.ref_name }}.darwin-arm64 + - arch: x86_64-apple-darwin + os: macos-latest + file: greptime-${{ github.ref_name }}.darwin-amd64 + runs-on: ${{ matrix.os }} + steps: + - name: Checkout sources + uses: actions/checkout@v3 + + - name: Cache cargo assets + 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 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.9/protoc-21.9-linux-x86_64.zip + unzip protoc-21.9-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 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 + + - name: Install stable toolchain + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: ${{ env.RUST_TOOLCHAIN }} + override: true + target: ${{ matrix.arch }} + + - name: Output package versions + run: protoc --version ; cargo version ; rustc --version ; gcc --version ; g++ --version + + - name: Run cargo build + uses: actions-rs/cargo@v1 + with: + command: build + args: ${{ matrix.opts }} --release --locked --target ${{ matrix.arch }} + + - name: Calculate checksum and rename binary + shell: bash + run: | + cd target/${{ matrix.arch }}/release + cp greptime ${{ matrix.file }} + echo $(shasum -a 256 greptime | cut -f1 -d' ') > ${{ matrix.file }}.sha256sum + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.file }} + path: target/${{ matrix.arch }}/release/${{ matrix.file }} + + - name: Upload checksum of artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.file }}.sha256sum + path: target/${{ matrix.arch }}/release/${{ matrix.file }}.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 }}" + files: | + **/greptime-${{ github.ref_name }}.* + + docker: + name: Build docker image + needs: [build] + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v2 + + - name: Download amd64 binary + uses: actions/download-artifact@v3 + with: + name: greptime-${{ github.ref_name }}.linux-amd64 + path: amd64 + + - name: Rename amd64 binary + run: | + mv amd64/greptime-${{ github.ref_name }}.linux-amd64 amd64/greptime + + - name: Download arm64 binary + uses: actions/download-artifact@v3 + with: + name: greptime-${{ github.ref_name }}.linux-arm64 + path: arm64 + + - name: Rename arm64 binary + run: | + mv arm64/greptime-${{ github.ref_name }}.linux-arm64 arm64/greptime + + - name: Set file permissions + shell: bash + run: | + chmod +x amd64/greptime arm64/greptime + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up buildx + uses: docker/setup-buildx-action@v2 + + - name: Build and push + uses: docker/build-push-action@v3 + with: + context: . + file: ./docker/ci/Dockerfile + push: true + platforms: linux/amd64,linux/arm64 + tags: ghcr.io/greptimeteam/greptimedb:${{ github.ref_name }} diff --git a/docker/Dockerfile b/docker/Dockerfile index 3a02c1195d..8140f09197 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -24,9 +24,8 @@ RUN cargo build --release # TODO(zyy17): Maybe should use the more secure container image. FROM ubuntu:22.04 as base -WORKDIR /greptimedb -COPY --from=builder /greptimedb/target/release/greptime /greptimedb/bin/ -ENV PATH /greptimedb/bin/:$PATH +WORKDIR /greptime +COPY --from=builder /greptimedb/target/release/greptime /greptime/bin/ +ENV PATH /greptime/bin/:$PATH -ENTRYPOINT [ "greptime" ] -CMD [ "datanode", "start"] +ENTRYPOINT ["greptime"] diff --git a/docker/ci/Dockerfile b/docker/ci/Dockerfile new file mode 100644 index 0000000000..358e277592 --- /dev/null +++ b/docker/ci/Dockerfile @@ -0,0 +1,9 @@ +FROM ubuntu:22.04 + +ARG TARGETARCH + +ADD $TARGETARCH/greptime /greptime/bin/ + +ENV PATH /greptime/bin/:$PATH + +ENTRYPOINT ["greptime"]