v0.34.24 #682
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
on: | |
push: | |
tags: | |
- 'v*.*.*' | |
- 'v*.*.*-*' | |
jobs: | |
npm: | |
runs-on: ubuntu-20.04 | |
timeout-minutes: 30 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: nightly-2022-03-22 | |
override: true | |
components: rustfmt | |
- name: Install Node.js 16.x | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 16.x | |
- name: Get yarn cache directory path | |
id: yarn-cache-dir-path | |
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Restore yarn cache | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | |
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-yarn- | |
- name: Set Yarn version | |
run: yarn policies set-version v1.22.19 | |
- name: Copy yarn.lock file | |
run: cp yarn.lock packages/cubejs-docker | |
- name: Yarn install | |
uses: nick-invision/retry@v2 | |
env: | |
CUBESTORE_SKIP_POST_INSTALL: true | |
with: | |
max_attempts: 3 | |
retry_on: error | |
retry_wait_seconds: 15 | |
timeout_minutes: 20 | |
command: yarn install --frozen-lockfile | |
- name: Build Core Client libraries | |
run: yarn build | |
- name: Build other packages | |
run: yarn lerna run --concurrency 1 build | |
env: | |
NODE_OPTIONS: --max_old_space_size=4096 | |
- name: Set NPM token | |
run: echo //registry.npmjs.org/:_authToken=$NPM_TOKEN > ~/.npmrc | |
env: | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: NPM publish | |
run: ./node_modules/.bin/lerna publish from-package --yes | |
native_linux: | |
runs-on: ubuntu-20.04 | |
timeout-minutes: 60 | |
name: Build native Linux ${{ matrix.node-version }} ${{ matrix.target }} Python ${{ matrix.python-version }} | |
strategy: | |
matrix: | |
node-version: [16] | |
python-version: ["3.9", "3.10", "3.11", "fallback"] | |
target: ["x86_64-unknown-linux-gnu", "aarch64-unknown-linux-gnu"] | |
include: | |
- target: x86_64-unknown-linux-gnu | |
package_target_arch: x64 | |
package_target_platform: linux | |
package_target_libc: glibc | |
- target: aarch64-unknown-linux-gnu | |
package_target_arch: arm64 | |
package_target_platform: linux | |
package_target_libc: glibc | |
fail-fast: false | |
container: | |
image: cubejs/rust-cross:${{ matrix.target }}-30052023 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: nightly-2022-03-22 | |
override: true | |
components: rustfmt | |
target: ${{ matrix.target }} | |
- name: Install Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Install Yarn | |
run: npm install -g yarn | |
- name: Set Yarn version | |
run: yarn policies set-version v1.22.19 | |
- name: Get yarn cache directory path | |
id: yarn-cache-dir-path | |
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Restore yarn cache | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | |
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-yarn- | |
- name: Copy yarn.lock file | |
run: cp yarn.lock packages/cubejs-docker | |
- name: Yarn install | |
uses: nick-invision/retry@v2 | |
env: | |
CUBESTORE_SKIP_POST_INSTALL: true | |
with: | |
max_attempts: 3 | |
retry_on: error | |
retry_wait_seconds: 15 | |
timeout_minutes: 20 | |
command: yarn install --frozen-lockfile | |
- name: Compile TypeScript | |
run: yarn tsc | |
- name: Build native (fallback) | |
if: (matrix.python-version == 'fallback') | |
env: | |
CARGO_BUILD_TARGET: ${{ matrix.target }} | |
run: cd packages/cubejs-backend-native && npm run native:build-release | |
- name: Setup cross compilation | |
if: (matrix.target == 'aarch64-unknown-linux-gnu') | |
uses: allenevans/set-env@v2.0.0 | |
with: | |
PYO3_CROSS_PYTHON_VERSION: ${{ matrix.python-version }} | |
- name: Build native (with Python) | |
if: (matrix.python-version != 'fallback') | |
env: | |
PYO3_PYTHON: python${{ matrix.python-version }} | |
CARGO_BUILD_TARGET: ${{ matrix.target }} | |
run: cd packages/cubejs-backend-native && npm run native:build-release-python | |
- name: Archive release asset | |
shell: bash | |
run: | | |
cd packages/cubejs-backend-native | |
rm -rf native | |
mkdir native | |
cp index.node native/index.node | |
tar czvf native.tar.gz native | |
- name: Upload to Release | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: packages/cubejs-backend-native/native.tar.gz | |
# Example: native-linux-arm64-glibc.tar.gz | |
asset_name: native-${{ matrix.package_target_platform }}-${{ matrix.package_target_arch }}-${{ matrix.package_target_libc }}-${{ matrix.python-version }}.tar.gz | |
tag: ${{ github.ref }} | |
overwrite: true | |
native_macos: | |
runs-on: ${{ matrix.os-version }} | |
timeout-minutes: 90 | |
name: Build ${{ matrix.os-version }} ${{ matrix.target }} ${{ matrix.node-version }} Python ${{ matrix.python-version }} | |
strategy: | |
matrix: | |
node-version: [16.x] | |
os-version: ["macos-11"] | |
target: ["x86_64-apple-darwin", "aarch64-apple-darwin"] | |
python-version: ["3.9", "3.10", "3.11", "fallback"] | |
include: | |
- target: x86_64-apple-darwin | |
package_target_arch: x64 | |
package_target_platform: darwin | |
package_target_libc: unknown | |
tar_executable: gtar | |
- target: aarch64-apple-darwin | |
package_target_arch: arm64 | |
package_target_platform: darwin | |
package_target_libc: unknown | |
tar_executable: gtar | |
exclude: | |
# Disable python builds for aarch64 (not ready) | |
- target: "aarch64-apple-darwin" | |
python-version: "3.9" | |
- target: "aarch64-apple-darwin" | |
python-version: "3.10" | |
- target: "aarch64-apple-darwin" | |
python-version: "3.11" | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: nightly-2022-03-22 | |
override: true | |
components: rustfmt | |
target: ${{ matrix.target }} | |
- name: Install Python | |
uses: actions/setup-python@v4 | |
if: (matrix.python-version != 'fallback') | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Get yarn cache directory path | |
id: yarn-cache-dir-path | |
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Restore yarn cache | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | |
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-yarn- | |
- name: Set Yarn version | |
run: yarn policies set-version v1.22.19 | |
- name: Copy yarn.lock file | |
run: cp yarn.lock packages/cubejs-docker | |
- name: Yarn install | |
uses: nick-invision/retry@v2 | |
env: | |
CUBESTORE_SKIP_POST_INSTALL: true | |
with: | |
max_attempts: 3 | |
retry_on: error | |
retry_wait_seconds: 15 | |
timeout_minutes: 20 | |
command: yarn install --frozen-lockfile | |
- name: Compile TypeScript | |
run: yarn tsc | |
- name: Build native (fallback) | |
if: (matrix.python-version == 'fallback') | |
run: cd packages/cubejs-backend-native && npm run native:build-release | |
env: | |
CARGO_BUILD_TARGET: ${{ matrix.target }} | |
- name: Build native (with Python) | |
if: (matrix.python-version != 'fallback') | |
env: | |
PYO3_PYTHON: python${{ matrix.python-version }} | |
CARGO_BUILD_TARGET: ${{ matrix.target }} | |
run: cd packages/cubejs-backend-native && npm run native:build-release-python | |
- name: Archive release asset | |
shell: bash | |
run: | | |
cd packages/cubejs-backend-native | |
rm -rf native | |
mkdir native | |
cp index.node native/index.node | |
${{ matrix.tar_executable }} -czvf native.tar.gz native | |
- name: Upload to Release | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: packages/cubejs-backend-native/native.tar.gz | |
# Example: native-linux-arm64-glibc.tar.gz | |
asset_name: native-${{ matrix.package_target_platform }}-${{ matrix.package_target_arch }}-${{ matrix.package_target_libc }}-${{ matrix.python-version }}.tar.gz | |
tag: ${{ github.ref }} | |
overwrite: true | |
native_windows: | |
runs-on: ${{ matrix.os-version }} | |
timeout-minutes: 90 | |
name: Build ${{ matrix.os-version }} ${{ matrix.node-version }} Python ${{ matrix.python-version }} | |
strategy: | |
matrix: | |
node-version: [16.x] | |
python-version: ["fallback"] | |
os-version: [windows-2019] | |
include: | |
- os-version: windows-2019 | |
package_target_arch: x64 | |
package_target_platform: win32 | |
package_target_libc: unknown | |
tar_executable: tar | |
fail-fast: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Disable rustup update (issue workaround for Windows) | |
run: rustup set auto-self-update disable | |
shell: bash | |
- name: Install Rust | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: nightly-2022-03-22 | |
override: true | |
components: rustfmt | |
- name: Install Python | |
uses: actions/setup-python@v4 | |
if: (matrix.python-version != 'fallback') | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Get yarn cache directory path | |
id: yarn-cache-dir-path | |
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Restore yarn cache | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | |
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-yarn- | |
- name: Set Yarn version | |
run: yarn policies set-version v1.22.19 | |
- name: Copy yarn.lock file | |
run: cp yarn.lock packages/cubejs-docker | |
- name: Yarn install | |
uses: nick-invision/retry@v2 | |
env: | |
CUBESTORE_SKIP_POST_INSTALL: true | |
with: | |
max_attempts: 3 | |
retry_on: error | |
retry_wait_seconds: 15 | |
timeout_minutes: 20 | |
command: yarn install --frozen-lockfile | |
- name: Compile TypeScript | |
run: yarn tsc | |
- name: Build native (fallback) | |
if: (matrix.python-version == 'fallback') | |
run: cd packages/cubejs-backend-native && npm run native:build-release | |
- name: Build native (with Python) | |
if: (matrix.python-version != 'fallback') | |
env: | |
PYO3_PYTHON: python${{ matrix.python-version }} | |
run: cd packages/cubejs-backend-native && npm run native:build-release-python | |
- name: Archive release asset | |
shell: bash | |
run: | | |
cd packages/cubejs-backend-native | |
rm -rf native | |
mkdir native | |
cp index.node native/index.node | |
${{ matrix.tar_executable }} -czvf native.tar.gz native | |
- name: Upload to Release | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: packages/cubejs-backend-native/native.tar.gz | |
# Example: native-linux-arm64-glibc.tar.gz | |
asset_name: native-${{ matrix.package_target_platform }}-${{ matrix.package_target_arch }}-${{ matrix.package_target_libc }}-${{ matrix.python-version }}.tar.gz | |
tag: ${{ github.ref }} | |
overwrite: true | |
docker-default: | |
needs: [npm, cubestore_linux, native_linux] | |
name: Debian docker image | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-22.04 | |
target: x86_64-unknown-linux-gnu | |
platforms: linux/amd64,linux/arm64 | |
timeout-minutes: 90 | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v4 | |
- name: Repo metadata | |
id: repo | |
uses: actions/github-script@v3 | |
with: | |
script: | | |
const { data } = await github.repos.get(context.repo) | |
const reg = new RegExp('π ', 'ug'); | |
data.description = data.description.replace(reg, "") | |
return data | |
- name: Prepare | |
id: prep | |
run: | | |
DOCKER_IMAGE=cubejs/cube | |
VERSION=noop | |
if [ "${{ github.event_name }}" = "schedule" ]; then | |
VERSION=nightly | |
elif [[ $GITHUB_REF == refs/tags/* ]]; then | |
VERSION=${GITHUB_REF#refs/tags/} | |
fi | |
TAGS="${DOCKER_IMAGE}:${VERSION}" | |
if [[ $VERSION =~ ^v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then | |
MINOR=${VERSION%.*} | |
MAJOR=${MINOR%.*} | |
TAGS="$TAGS,${DOCKER_IMAGE}:${MINOR},${DOCKER_IMAGE}:${MAJOR},${DOCKER_IMAGE}:latest" | |
fi | |
echo ::set-output name=version::${VERSION} | |
echo ::set-output name=tags::${TAGS} | |
echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ') | |
- name: Login to DockerHub | |
uses: docker/login-action@v1 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
with: | |
version: v0.10.3 | |
- name: Copy yarn.lock file | |
run: cp yarn.lock packages/cubejs-docker | |
- name: Push to Docker Hub | |
uses: docker/build-push-action@v3 | |
with: | |
context: ./packages/cubejs-docker | |
file: ./packages/cubejs-docker/latest.Dockerfile | |
platforms: ${{ matrix.platforms }} | |
push: true | |
tags: ${{ steps.prep.outputs.tags }} | |
labels: | | |
org.opencontainers.image.title=${{ fromJson(steps.repo.outputs.result).name }} | |
org.opencontainers.image.description=${{ fromJson(steps.repo.outputs.result).description }} | |
org.opencontainers.image.url=${{ fromJson(steps.repo.outputs.result).html_url }} | |
org.opencontainers.image.source=${{ fromJson(steps.repo.outputs.result).clone_url }} | |
org.opencontainers.image.version=${{ steps.prep.outputs.version }} | |
org.opencontainers.image.created=${{ steps.prep.outputs.created }} | |
org.opencontainers.image.revision=${{ github.sha }} | |
org.opencontainers.image.licenses=${{ fromJson(steps.repo.outputs.result).license.spdx_id }} | |
# Workaround for yarn v1, it uses aggressive timeouts with summing time spending on fs, https://github.com/yarnpkg/yarn/issues/4890 | |
config-inline: | | |
[worker.oci] | |
max-parallelism = 1 | |
build-args: | | |
IMAGE_VERSION=${{ steps.prep.outputs.version }} | |
docker-alpine: | |
needs: [npm, cubestore_linux, native_linux] | |
name: Alpine docker image | |
runs-on: ubuntu-20.04 | |
timeout-minutes: 30 | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v4 | |
- name: Repo metadata | |
id: repo | |
uses: actions/github-script@v3 | |
with: | |
script: | | |
const { data } = await github.repos.get(context.repo) | |
const reg = new RegExp('π ', 'ug'); | |
data.description = data.description.replace(reg, "") | |
return data | |
- name: Prepare | |
id: prep | |
run: | | |
DOCKER_IMAGE=cubejs/cube | |
VERSION=noop | |
if [ "${{ github.event_name }}" = "schedule" ]; then | |
VERSION=nightly | |
elif [[ $GITHUB_REF == refs/tags/* ]]; then | |
VERSION=${GITHUB_REF#refs/tags/} | |
fi | |
TAGS="${DOCKER_IMAGE}:${VERSION}-alpine" | |
if [[ $VERSION =~ ^v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then | |
MINOR=${VERSION%.*} | |
MAJOR=${MINOR%.*} | |
TAGS="$TAGS,${DOCKER_IMAGE}:${MINOR}-alpine,${DOCKER_IMAGE}:${MAJOR}-alpine,${DOCKER_IMAGE}:alpine" | |
elif [ "${{ github.event_name }}" = "push" ]; then | |
TAGS="$TAGS,${DOCKER_IMAGE}:sha-${GITHUB_SHA::8}-alpine" | |
fi | |
echo ::set-output name=version::${VERSION} | |
echo ::set-output name=tags::${TAGS} | |
echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ') | |
- name: Login to DockerHub | |
uses: docker/login-action@v1 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
with: | |
version: v0.9.1 | |
- name: Copy yarn.lock file | |
run: cp yarn.lock packages/cubejs-docker | |
- name: Push to Docker Hub | |
uses: docker/build-push-action@v3 | |
with: | |
context: ./packages/cubejs-docker | |
file: ./packages/cubejs-docker/latest-alpine.Dockerfile | |
platforms: linux/amd64 | |
push: true | |
tags: ${{ steps.prep.outputs.tags }} | |
labels: | | |
org.opencontainers.image.title=${{ fromJson(steps.repo.outputs.result).name }} | |
org.opencontainers.image.description=${{ fromJson(steps.repo.outputs.result).description }} | |
org.opencontainers.image.url=${{ fromJson(steps.repo.outputs.result).html_url }} | |
org.opencontainers.image.source=${{ fromJson(steps.repo.outputs.result).clone_url }} | |
org.opencontainers.image.version=${{ steps.prep.outputs.version }} | |
org.opencontainers.image.created=${{ steps.prep.outputs.created }} | |
org.opencontainers.image.revision=${{ github.sha }} | |
org.opencontainers.image.licenses=${{ fromJson(steps.repo.outputs.result).license.spdx_id }} | |
build-args: | | |
IMAGE_VERSION=${{ steps.prep.outputs.version }} | |
docker-debian-jdk: | |
needs: [npm, cubestore_linux, native_linux] | |
name: Debian with jdk docker image | |
runs-on: ubuntu-20.04 | |
timeout-minutes: 30 | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v4 | |
- name: Repo metadata | |
id: repo | |
uses: actions/github-script@v3 | |
with: | |
script: | | |
const { data } = await github.repos.get(context.repo) | |
const reg = new RegExp('π ', 'ug'); | |
data.description = data.description.replace(reg, "") | |
return data | |
- name: Prepare | |
id: prep | |
run: | | |
DOCKER_IMAGE=cubejs/cube | |
VERSION=noop | |
if [ "${{ github.event_name }}" = "schedule" ]; then | |
VERSION=nightly | |
elif [[ $GITHUB_REF == refs/tags/* ]]; then | |
VERSION=${GITHUB_REF#refs/tags/} | |
fi | |
TAGS="${DOCKER_IMAGE}:${VERSION}-jdk" | |
if [[ $VERSION =~ ^v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then | |
MINOR=${VERSION%.*} | |
MAJOR=${MINOR%.*} | |
TAGS="$TAGS,${DOCKER_IMAGE}:${MINOR}-jdk,${DOCKER_IMAGE}:${MAJOR}-jdk,${DOCKER_IMAGE}:jdk" | |
elif [ "${{ github.event_name }}" = "push" ]; then | |
TAGS="$TAGS,${DOCKER_IMAGE}:sha-${GITHUB_SHA::8}-jdk" | |
fi | |
echo ::set-output name=version::${VERSION} | |
echo ::set-output name=tags::${TAGS} | |
echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ') | |
- name: Login to DockerHub | |
uses: docker/login-action@v1 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
with: | |
version: v0.9.1 | |
- name: Copy yarn.lock file | |
run: cp yarn.lock packages/cubejs-docker | |
- name: Push to Docker Hub | |
uses: docker/build-push-action@v3 | |
with: | |
context: ./packages/cubejs-docker | |
file: ./packages/cubejs-docker/latest-debian-jdk.Dockerfile | |
platforms: linux/amd64 | |
push: true | |
tags: ${{ steps.prep.outputs.tags }} | |
labels: | | |
org.opencontainers.image.title=${{ fromJson(steps.repo.outputs.result).name }} | |
org.opencontainers.image.description=${{ fromJson(steps.repo.outputs.result).description }} | |
org.opencontainers.image.url=${{ fromJson(steps.repo.outputs.result).html_url }} | |
org.opencontainers.image.source=${{ fromJson(steps.repo.outputs.result).clone_url }} | |
org.opencontainers.image.version=${{ steps.prep.outputs.version }} | |
org.opencontainers.image.created=${{ steps.prep.outputs.created }} | |
org.opencontainers.image.revision=${{ github.sha }} | |
org.opencontainers.image.licenses=${{ fromJson(steps.repo.outputs.result).license.spdx_id }} | |
build-args: | | |
IMAGE_VERSION=${{ steps.prep.outputs.version }} | |
docker-cubestore: | |
name: Cube Store Docker | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-20.04 | |
target: x86_64-unknown-linux-gnu | |
platforms: linux/amd64 | |
build-args: WITH_AVX2=1 | |
postfix: "" | |
tag: "latest" | |
- os: self-hosted | |
target: aarch64-unknown-linux-gnu | |
platforms: linux/arm64 | |
build-args: WITH_AVX2=0 | |
postfix: "-arm64v8" | |
tag: "arm64v8" | |
# Non AVX build | |
- os: ubuntu-20.04 | |
target: x86_64-unknown-linux-gnu | |
platforms: linux/amd64 | |
build-args: WITH_AVX2=0 | |
postfix: "-non-avx" | |
tag: "non-avx" | |
timeout-minutes: 60 | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v4 | |
- name: Repo metadata | |
id: repo | |
uses: actions/github-script@v3 | |
with: | |
script: | | |
const { data } = await github.repos.get(context.repo) | |
const reg = new RegExp('π ', 'ug'); | |
data.description = data.description.replace(reg, "") | |
return data | |
- name: Prepare | |
id: prep | |
env: | |
GITHUB_SHA: ${{ github.sha }} | |
run: | | |
DOCKER_IMAGE=cubejs/cubestore | |
VERSION=noop | |
if [ "${{ github.event_name }}" = "schedule" ]; then | |
VERSION=nightly | |
elif [[ $GITHUB_REF == refs/tags/* ]]; then | |
VERSION=${GITHUB_REF#refs/tags/} | |
fi | |
TAGS="${DOCKER_IMAGE}:${VERSION}${{ matrix.postfix }}" | |
if [[ $VERSION =~ ^v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then | |
MINOR=${VERSION%.*} | |
MAJOR=${MINOR%.*} | |
TAGS="$TAGS,${DOCKER_IMAGE}:${MINOR}${{ matrix.postfix }},${DOCKER_IMAGE}:${MAJOR}${{ matrix.postfix }},${DOCKER_IMAGE}:${{ matrix.tag }}" | |
fi | |
echo ::set-output name=version::${VERSION} | |
echo ::set-output name=tags::${TAGS} | |
echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ') | |
- name: Login to DockerHub | |
uses: docker/login-action@v1 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
with: | |
version: v0.9.1 | |
- name: Cache Docker layers | |
uses: actions/cache@v3 | |
with: | |
path: /tmp/.buildx-cache | |
key: ${{ runner.os }}-${{ matrix.target }}-buildx-${{ matrix.tag }}-${{ github.sha }} | |
restore-keys: | | |
${{ runner.os }}-${{ matrix.target }}-buildx-${{ matrix.tag }}- | |
- name: Push to Docker Hub | |
uses: docker/build-push-action@v3 | |
with: | |
context: ./rust/cubestore/ | |
file: ./rust/cubestore/Dockerfile | |
platforms: ${{ matrix.platforms }} | |
build-args: ${{ matrix.build-args }} | |
push: true | |
tags: ${{ steps.prep.outputs.tags }} | |
cache-from: type=local,src=/tmp/.buildx-cache | |
cache-to: type=local,dest=/tmp/.buildx-cache | |
labels: | | |
org.opencontainers.image.title=${{ fromJson(steps.repo.outputs.result).name }} | |
org.opencontainers.image.description=${{ fromJson(steps.repo.outputs.result).description }} | |
org.opencontainers.image.url=${{ fromJson(steps.repo.outputs.result).html_url }} | |
org.opencontainers.image.source=${{ fromJson(steps.repo.outputs.result).clone_url }} | |
org.opencontainers.image.version=${{ steps.prep.outputs.version }} | |
org.opencontainers.image.created=${{ steps.prep.outputs.created }} | |
org.opencontainers.image.revision=${{ github.sha }} | |
org.opencontainers.image.licenses=${{ fromJson(steps.repo.outputs.result).license.spdx_id }} | |
- name: Update repo description | |
uses: peter-evans/dockerhub-description@v2 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
repository: cubejs/cubestore | |
readme-filepath: ./rust/cubestore/README.md | |
cubestore_linux: | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 90 | |
env: | |
RUSTFLAGS: '-Ctarget-feature=+crt-static' | |
OPENSSL_STATIC: 1 | |
strategy: | |
matrix: | |
target: | |
- x86_64-unknown-linux-gnu | |
- x86_64-unknown-linux-musl | |
- aarch64-unknown-linux-gnu | |
include: | |
- target: x86_64-unknown-linux-gnu | |
os: ubuntu-20.04 | |
executable_name: cubestored | |
cross: true | |
strip: true | |
compress: false | |
- target: x86_64-unknown-linux-musl | |
os: ubuntu-20.04 | |
executable_name: cubestored | |
cross: true | |
strip: true | |
# cubestored: CantPackException: bad DT_HASH nbucket=0x344 len=0x1890 | |
compress: false | |
- target: aarch64-unknown-linux-gnu | |
os: ubuntu-20.04 | |
executable_name: cubestored | |
cross: true | |
# Unable to recognise the format of the input file `rust/cubestore/target/aarch64-unknown-linux-gnu/release/cubestored' | |
strip: false | |
# UPX is broken, issue https://github.com/cube-js/cube/issues/4474 | |
compress: false | |
fail-fast: false | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Disable rustup update (issue workaround for Windows) | |
run: rustup set auto-self-update disable | |
if: contains(runner.os, 'windows') | |
shell: bash | |
- name: Setup Rust toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: nightly-2022-06-22 | |
target: ${{ matrix.target }} | |
override: true | |
components: rustfmt | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: ./rust/cubestore -> target | |
prefix-key: v0-rust-cubestore-cross | |
key: target-${{ matrix.target }} | |
- run: source .github/actions/${{ matrix.before_script }}.sh | |
if: ${{ matrix.before_script }} | |
shell: bash | |
- name: Build with Cross | |
if: ${{ matrix.cross }} | |
run: | | |
wget -c https://github.com/rust-embedded/cross/releases/download/v0.2.1/cross-v0.2.1-x86_64-unknown-linux-gnu.tar.gz -O - | tar -xz | |
chmod +x cross && sudo mv cross /usr/local/bin/cross | |
cd rust/cubestore | |
cross build --release --target=${{ matrix.target }} | |
- name: Build with Cargo | |
if: ${{ !matrix.cross }} | |
run: | | |
cd rust/cubestore && cargo build --release --target=${{ matrix.target }} | |
- name: Compress binaries | |
uses: svenstaro/upx-action@v2 | |
if: ${{ matrix.compress }} | |
with: | |
file: rust/cubestore/target/${{ matrix.target }}/release/${{ matrix.executable_name }} | |
args: --lzma | |
strip: ${{ matrix.strip }} | |
- name: Create folder for archive | |
run: | | |
mkdir cubestore-archive | |
mkdir cubestore-archive/bin | |
- name: Create archive for release | |
run: | | |
mv rust/cubestore/target/${{ matrix.target }}/release/${{ matrix.executable_name }} cubestore-archive/bin/${{ matrix.executable_name }} | |
cd cubestore-archive | |
tar -cvzf cubestored-${{ matrix.target }}.tar.gz * | |
- name: Upload Binary to Release | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: cubestore-archive/cubestored-${{ matrix.target }}.tar.gz | |
asset_name: cubestored-${{ matrix.target }}.tar.gz | |
tag: ${{ github.ref }} | |
overwrite: true | |
cubestore: | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 90 | |
env: | |
RUSTFLAGS: '-Ctarget-feature=+crt-static' | |
OPENSSL_STATIC: 1 | |
strategy: | |
matrix: | |
target: | |
- x86_64-pc-windows-msvc | |
- x86_64-apple-darwin | |
include: | |
- target: x86_64-pc-windows-msvc | |
os: windows-2019 | |
executable_name: cubestored.exe | |
cross: false | |
strip: true | |
# cubestored.exe: CantPackException: superfluous data between sections | |
compress: false | |
# Please use minimal possible version of macOS, because it produces constraint on libstdc++ | |
tar_executable: tar | |
- target: x86_64-apple-darwin | |
os: macos-11 | |
executable_name: cubestored | |
cross: false | |
strip: false | |
compress: false | |
# bsd tar has a different format with Sparse files which breaks download script | |
tar_executable: gtar | |
fail-fast: false | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Disable rustup update (issue workaround for Windows) | |
run: rustup set auto-self-update disable | |
if: contains(runner.os, 'windows') | |
shell: bash | |
- name: Setup Rust toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: nightly-2022-06-22 | |
target: ${{ matrix.target }} | |
override: true | |
components: rustfmt | |
- uses: Swatinem/rust-cache@v1 | |
with: | |
working-directory: rust/cubestore | |
key: cross-${{ runner.OS }}-${{ matrix.target }} | |
sharedKey: cross-${{ runner.OS }}-${{ matrix.target }} | |
- run: source .github/actions/${{ matrix.before_script }}.sh | |
if: ${{ matrix.before_script }} | |
shell: bash | |
- uses: ilammy/msvc-dev-cmd@v1 | |
if: ${{ startsWith(matrix.os, 'windows') }} | |
- name: Install OpenSSL for Windows | |
if: ${{ startsWith(matrix.os, 'windows') }} | |
run: vcpkg integrate install; vcpkg install openssl:x64-windows | |
- name: Instal LLVM for Windows | |
if: ${{ startsWith(matrix.os, 'windows') }} | |
run: choco install -y --force llvm --version 9.0.1 | |
- name: Set Env Variables for Windows | |
uses: allenevans/set-env@v2.0.0 | |
if: ${{ startsWith(matrix.os, 'windows') }} | |
with: | |
OPENSSL_DIR: 'C:/vcpkg/packages/openssl_x64-windows' | |
# This paths are required to work with static linking | |
OPENSSL_LIB_DIR: 'C:/vcpkg/packages/openssl_x64-windows/lib' | |
OPENSSL_INCLUDE_DIR: 'C:/vcpkg/packages/openssl_x64-windows/include' | |
LIBCLANG_PATH: 'C:\Program Files\LLVM\bin' | |
# Hotfix before https://github.com/actions/runner-images/pull/7125 will be released/rolled on the productions servers | |
- name: Hotfix for macOS (pkg-config) | |
if: contains(runner.os, 'macos') | |
run: brew install pkg-config | |
- name: Build with Cross | |
if: ${{ matrix.cross }} | |
run: | | |
wget -c https://github.com/rust-embedded/cross/releases/download/v0.2.1/cross-v0.2.1-x86_64-unknown-linux-gnu.tar.gz -O - | tar -xz | |
chmod +x cross && sudo mv cross /usr/local/bin/cross | |
cd rust/cubestore | |
cross build --release --target=${{ matrix.target }} | |
- name: Build with Cargo | |
if: ${{ !matrix.cross }} | |
run: | | |
cd rust/cubestore && cargo build --release --target=${{ matrix.target }} | |
- name: Compress binaries | |
uses: svenstaro/upx-action@v2 | |
if: ${{ matrix.compress }} | |
with: | |
file: rust/cubestore/target/${{ matrix.target }}/release/${{ matrix.executable_name }} | |
args: --lzma | |
strip: ${{ matrix.strip }} | |
- name: Create folder for archive | |
run: | | |
mkdir cubestore-archive | |
mkdir cubestore-archive/bin | |
- name: Copy/paste OpenSSL to Archive (hotfix for Windows) | |
if: ${{ startsWith(matrix.os, 'windows') }} | |
run: cp C:/vcpkg/packages/openssl_x64-windows/bin/*.dll cubestore-archive/bin | |
- name: Create archive for release | |
run: | | |
mv rust/cubestore/target/${{ matrix.target }}/release/${{ matrix.executable_name }} cubestore-archive/bin/${{ matrix.executable_name }} | |
cd cubestore-archive | |
${{ matrix.tar_executable }} -cvzf cubestored-${{ matrix.target }}.tar.gz * | |
- name: Upload Binary to Release | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: cubestore-archive/cubestored-${{ matrix.target }}.tar.gz | |
asset_name: cubestored-${{ matrix.target }}.tar.gz | |
tag: ${{ github.ref }} | |
overwrite: true |