From 0a5c88de1c5069ed031d54cb769d8b2f39b14dfb Mon Sep 17 00:00:00 2001 From: Daniel Chambers Date: Thu, 14 Mar 2024 13:14:05 +1100 Subject: [PATCH] Add CLI and connector definition build --- .github/workflows/deploy.yml | 106 +++++++++++++++++++ connector-definition/Makefile | 2 + connector-definition/connector-metadata.yaml | 2 +- 3 files changed, 109 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 80370d41..0fa5d715 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -3,6 +3,7 @@ on: push: branches: - main + - test-ci/** tags: - 'v*' @@ -65,3 +66,108 @@ jobs: - name: Deploy 🚀 run: nix run .#publish-docker-image ${{ github.ref }} + + connector-definition: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Build connector definition + run: | + set -e pipefail + export DOCKER_IMAGE="ghcr.io/hasura/mongodb-connector:$GITHUB_REF_NAME" + export CLI_VERSION=$GITHUB_REF_NAME + make build + working-directory: ./connector-definition + - uses: actions/upload-artifact@v4 + with: + name: connector-definition.tgz + path: ./connector-definition/dist/connector-definition.tgz + compression-level: 0 # Already compressed + + build-cli-binaries: + name: build the CLI binaries + strategy: + matrix: + include: + - runner: ubuntu-latest + target: x86_64-unknown-linux-gnu + - runner: ubuntu-latest + target: aarch64-unknown-linux-gnu + linux-packages: gcc-aarch64-linux-gnu + linker: /usr/bin/aarch64-linux-gnu-gcc + - runner: macos-latest + target: x86_64-apple-darwin + - runner: macos-latest + target: aarch64-apple-darwin + - runner: windows-latest + target: x86_64-pc-windows-msvc + extension: .exe + runs-on: ${{ matrix.runner }} + env: + CARGO_BUILD_TARGET: ${{ matrix.target }} + CARGO_NET_GIT_FETCH_WITH_CLI: "true" + # RUSTFLAGS: "-D warnings" # fail on warnings + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v4 + + - name: install protoc + uses: arduino/setup-protoc@v3 + with: + version: "25.x" + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - name: install tools + run: | + rustup show + rustup target add ${{ matrix.target }} + + - name: install other packages required + if: matrix.linux-packages + run: | + sudo apt-get update + sudo apt-get install -y ${{ matrix.linux-packages }} + + - uses: Swatinem/rust-cache@v2 + with: + shared-key: "build" # share the cache across jobs + + - name: build the CLI + run: | + # If we're on a tag, use the tag name as the release version. + if [[ "$GITHUB_REF_TYPE" == 'tag' ]]; then + # Ensure that the version specified in Cargo.toml is the same as the tag (with a 'v' prefix). + CARGO_VERSION="$(cargo metadata --format-version=1 | jq -r '.packages | .[] | select(.name == "ndc-postgres") | .version')" + echo "Git tag: ${GITHUB_REF_NAME}" + echo "Cargo version: ${CARGO_VERSION}" + + if [[ "${GITHUB_REF_NAME}" != "v${CARGO_VERSION}" ]]; then + echo >&2 "The Git tag is \"${GITHUB_REF_NAME}\", but the version in Cargo.toml is \"${CARGO_VERSION}\"." + echo >&2 'These must be the same, with a "v" prefix for the tag. Aborting.' + exit 1 + fi + export RELEASE_VERSION="$GITHUB_REF_NAME" + echo "RELEASE_VERSION = ${RELEASE_VERSION}" + fi + + if [[ -n '${{ matrix.linker }}' ]]; then + TARGET_SCREAMING="$(echo '${{ matrix.target }}' | tr '[:lower:]' '[:upper:]' | tr '-' '_')" + echo "CARGO_TARGET_${TARGET_SCREAMING}_LINKER"='${{ matrix.linker }}' + declare "CARGO_TARGET_${TARGET_SCREAMING}_LINKER"='${{ matrix.linker }}' + export "CARGO_TARGET_${TARGET_SCREAMING}_LINKER" + fi + + echo "Building for target: ${CARGO_BUILD_TARGET}" + cargo build --release --package=mongodb-cli-plugin + + mkdir -p release + mv -v target/${{ matrix.target }}/release/hasura-mongodb release/hasura-mongodb-${{ matrix.target }}${{ matrix.extension }} + + - uses: actions/upload-artifact@v4 + with: + name: release/hasura-mongodb-${{ matrix.target }}${{ matrix.extension }} + path: release + if-no-files-found: error + \ No newline at end of file diff --git a/connector-definition/Makefile b/connector-definition/Makefile index d6744a88..e33e46f9 100644 --- a/connector-definition/Makefile +++ b/connector-definition/Makefile @@ -13,9 +13,11 @@ dist dist/.hasura-connector: mkdir dist/.hasura-connector dist/.hasura-connector/connector-metadata.yaml: DOCKER_IMAGE ?= $(error The DOCKER_IMAGE variable must be defined) +dist/.hasura-connector/connector-metadata.yaml: CLI_VERSION ?= $(error The CLI_VERSION variable must be defined) dist/.hasura-connector/connector-metadata.yaml: connector-metadata.yaml dist/.hasura-connector cp -f connector-metadata.yaml dist/.hasura-connector/ yq -i '.packagingDefinition.dockerImage = "$(DOCKER_IMAGE)"' dist/.hasura-connector/connector-metadata.yaml + yq -i '.cliPlugin.version = "$(CLI_VERSION)"' dist/.hasura-connector/connector-metadata.yaml dist/connector-definition.tgz: dist/.hasura-connector/connector-metadata.yaml shopt -s dotglob && cd dist && tar -czvf connector-definition.tgz * \ No newline at end of file diff --git a/connector-definition/connector-metadata.yaml b/connector-definition/connector-metadata.yaml index 833db913..70ce7ad0 100644 --- a/connector-definition/connector-metadata.yaml +++ b/connector-definition/connector-metadata.yaml @@ -8,7 +8,7 @@ commands: update: hasura-mongodb update cliPlugin: name: hasura-mongodb - version: "0.0.1" + version: dockerComposeWatch: - path: ./ target: /etc/connector