这是indexloc提供的服务,不要输入任何密码
Skip to content

CI for CLI xplat binary build, connector definition build, CLI plugin manifest generation, GitHub release #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Mar 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
166 changes: 166 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,169 @@ jobs:

- name: Deploy 🚀
run: nix run .#publish-docker-image ${{ github.ref }}

connector-definition:
# For now, only run on tagged releases because main builds generate a Docker image tag name that
# is not easily accessible here
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Build connector definition
run: |
set -e pipefail
export DOCKER_IMAGE="ghcr.io/hasura/ndc-mongodb:$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-musl
rustflags: -C target-feature=+crt-static
linux-packages: musl-tools
- runner: ubuntu-latest
target: aarch64-unknown-linux-musl
rustflags: -C target-feature=+crt-static
linux-packages: gcc-aarch64-linux-gnu musl-tools
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
rustflags: -C target-feature=+crt-static
extension: .exe
runs-on: ${{ matrix.runner }}
env:
CARGO_BUILD_TARGET: ${{ matrix.target }}
CARGO_NET_GIT_FETCH_WITH_CLI: "true"
RUSTFLAGS: "-D warnings ${{ matrix.rustflags }}"
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/mongodb-cli-plugin release/mongodb-cli-plugin-${{ matrix.target }}${{ matrix.extension }}

- uses: actions/upload-artifact@v4
with:
name: mongodb-cli-plugin-${{ matrix.target }}${{ matrix.extension }}
path: release
if-no-files-found: error

release:
name: release to GitHub
needs:
- docker
- connector-definition
- build-cli-binaries
runs-on: ubuntu-latest
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
steps:
- uses: actions/checkout@v4

- uses: actions/download-artifact@v4
with:
path: release/artifacts
merge-multiple: true

- name: generate SHA-256 checksums
run: |
cd release/artifacts
sha256sum * > ./sha256sum
cat ./sha256sum

- name: generate CLI manifest
run: |
export VERSION="$GITHUB_REF_NAME"
./scripts/generate-manifest.sh

- uses: actions/upload-artifact@v4
with:
name: manifest.yaml
path: release/manifest.yaml
if-no-files-found: error

- name: Get version from tag
id: get-version
run: |
echo "tagged_version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
shell: bash

- uses: mindsers/changelog-reader-action@v2
id: changelog-reader
with:
version: ${{ steps.get-version.outputs.tagged_version }}
path: ./CHANGELOG.md

- name: create a draft release
uses: ncipollo/release-action@v1
with:
draft: true
tag: v${{ steps.get-version.outputs.tagged_version }}
body: ${{ steps.changelog-reader.outputs.changes }}
artifacts: release/artifacts/*
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# MongoDB Connector Changelog
This changelog documents the changes between release versions.

## [Unreleased]
Changes to be included in the next upcoming release

## [0.1.0] - 2024-03-14
TBD
2 changes: 2 additions & 0 deletions connector-definition/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 *
4 changes: 2 additions & 2 deletions connector-definition/connector-metadata.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ supportedEnvironmentVariables:
commands:
update: hasura-mongodb update
cliPlugin:
name: hasura-mongodb
version: "0.0.1"
name: mongodb
version:
dockerComposeWatch:
- path: ./
target: /etc/connector
Expand Down
4 changes: 0 additions & 4 deletions crates/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,6 @@ name = "mongodb-cli-plugin"
edition = "2021"
version.workspace = true

[[bin]]
name = "hasura-mongodb"
path = "./src/main.rs"

[dependencies]
configuration = { path = "../configuration" }
mongodb-agent-common = { path = "../mongodb-agent-common" }
Expand Down
2 changes: 1 addition & 1 deletion deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#
set -euo pipefail

IMAGE_PATH=ghcr.io/hasura/ndc-mongo
IMAGE_PATH=ghcr.io/hasura/ndc-mongodb

if [ -z "${1+x}" ]; then
echo "Expected argument of the form refs/heads/<branch name> or refs/tags/<tag name>."
Expand Down
2 changes: 1 addition & 1 deletion nix/docker-cli-plugin.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ dockerTools.buildLayeredImage {
inherit name;
created = "now";
config = {
Entrypoint = [ "${mongodb-cli-plugin}/bin/hasura-mongodb" ];
Entrypoint = [ "${mongodb-cli-plugin}/bin/mongodb-cli-plugin" ];
};
}
2 changes: 1 addition & 1 deletion nix/docker.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
, dockerTools
, lib
, architecture ? null
, name ? "ghcr.io/hasura/mongodb-connector"
, name ? "ghcr.io/hasura/ndc-mongodb"

# See config options at https://github.com/moby/docker-image-spec/blob/main/spec.md
, extraConfig ? { }
Expand Down
15 changes: 15 additions & 0 deletions scripts/generate-manifest.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/usr/bin/env bash

set -evo pipefail
ROOT="$(pwd)"

export LINUX_AMD64_SHA256=$(cat ${ROOT}/release/artifacts/sha256sum | grep mongodb-cli-plugin-x86_64-unknown-linux-musl | cut -f1 -d' ')
export MACOS_AMD64_SHA256=$(cat ${ROOT}/release/artifacts/sha256sum | grep mongodb-cli-plugin-x86_64-apple-darwin | cut -f1 -d' ')
export WINDOWS_AMD64_SHA256=$(cat ${ROOT}/release/artifacts/sha256sum | grep mongodb-cli-plugin-x86_64-pc-windows-msvc.exe | cut -f1 -d' ')
export LINUX_ARM64_SHA256=$(cat ${ROOT}/release/artifacts/sha256sum | grep mongodb-cli-plugin-aarch64-unknown-linux-musl | cut -f1 -d' ')
export MACOS_ARM64_SHA256=$(cat ${ROOT}/release/artifacts/sha256sum | grep mongodb-cli-plugin-aarch64-apple-darwin | cut -f1 -d' ')

(echo "cat <<EOF >${ROOT}/release/manifest.yaml";
cat ${ROOT}/scripts/manifest.yaml; echo; echo EOF;
)>${ROOT}/release/manifest-tmp.yaml
. ${ROOT}/release/manifest-tmp.yaml
40 changes: 40 additions & 0 deletions scripts/manifest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: mongodb
version: "${VERSION}"
shortDescription: "CLI plugin for Hasura ndc-mongodb"
homepage: https://hasura.io/connectors/mongodb
platforms:
- selector: darwin-arm64
uri: "https://github.com/hasura/ndc-mongodb/releases/download/${VERSION}/mongodb-cli-plugin-aarch64-apple-darwin"
sha256: "${MACOS_ARM64_SHA256}"
bin: "hasura-mongodb"
files:
- from: "./mongodb-cli-plugin-aarch64-apple-darwin"
to: "hasura-mongodb"
- selector: linux-arm64
uri: "https://github.com/hasura/ndc-mongodb/releases/download/${VERSION}/mongodb-cli-plugin-aarch64-unknown-linux-musl"
sha256: "${LINUX_ARM64_SHA256}"
bin: "hasura-mongodb"
files:
- from: "./mongodb-cli-plugin-aarch64-unknown-linux-musl"
to: "hasura-mongodb"
- selector: darwin-amd64
uri: "https://github.com/hasura/ndc-mongodb/releases/download/${VERSION}/mongodb-cli-plugin-x86_64-apple-darwin"
sha256: "${MACOS_AMD64_SHA256}"
bin: "hasura-mongodb"
files:
- from: "./mongodb-cli-plugin-x86_64-apple-darwin"
to: "hasura-mongodb"
- selector: windows-amd64
uri: "https://github.com/hasura/ndc-mongodb/releases/download/${VERSION}/mongodb-cli-plugin-x86_64-pc-windows-msvc.exe"
sha256: "${WINDOWS_AMD64_SHA256}"
bin: "hasura-mongodb.exe"
files:
- from: "./mongodb-cli-plugin-x86_64-pc-windows-msvc.exe"
to: "hasura-mongodb.exe"
- selector: linux-amd64
uri: "https://github.com/hasura/ndc-mongodb/releases/download/${VERSION}/mongodb-cli-plugin-x86_64-unknown-linux-musl"
sha256: "${LINUX_AMD64_SHA256}"
bin: "hasura-mongodb"
files:
- from: "./mongodb-cli-plugin-x86_64-unknown-linux-musl"
to: "hasura-mongodb"