mongodb-realm-cli
Version:
The MongoDB Realm Command Line Interface
446 lines (428 loc) • 15.9 kB
YAML
functions:
"fetch_go":
- command: shell.exec
params:
shell: "bash"
script: |
set -e
wget --quiet ${go_url}
tar xvf ./go1*gz
"fetch_baas_artifacts": &fetch_baas_artifacts
- command: shell.exec
params:
shell: "bash"
script: | # find all baas release branches, sort them, and grab the latest release's commit id
git ls-remote git@github.com:10gen/baas.git | grep refs/heads/v20 | sort -k2 | awk '{ print "baas_revision: \""$1"\"" }' | tail -n 1 > baas.yml
- command: expansions.update
params:
file: baas.yml
- command: s3.get
params:
aws_key: ${stitch_cloud_aws_key}
aws_secret: ${stitch_cloud_aws_secret}
remote_file: ${baas_revision}-race.tgz
bucket: stitch-cloud-versions
local_file: baas_artifacts.tgz
- command: shell.exec
params:
shell: "bash"
script: |
set -e
mkdir baas_artifacts
tar zvxf baas_artifacts.tgz -C baas_artifacts
"setup_node": &setup_node
command: shell.exec
params:
shell: "bash"
script: |
set -e
export ROOT_DIR=`pwd`
export NVM_DIR="$ROOT_DIR/.nvm"
if [ ! -d "$NVM_DIR" ]; then
git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR"
cd "$NVM_DIR"
git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
fi
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install ${node_version}
nvm use ${node_version}
"setup_project":
- command: git.get_project
params:
directory: realm-cli
"setup_mongod":
- command: shell.exec
params:
shell: "bash"
script: |
set -v
curl --silent ${mongodb_url} | tar xvz
- command: shell.exec
params:
shell: "bash"
background: true
script: |
set -v
cd mongodb-*
echo "starting mongod..."
mkdir db_files
./bin/mongod --dbpath ./db_files --port 26000 --replSet "test" &
echo "waiting for mongod to start up"
- command: shell.exec
params:
shell: "bash"
script: |
set -e
cd mongodb-*
echo "waiting for mongod to start up"
./bin/mongo --nodb --eval 'assert.soon(function(x){try{var d = new Mongo("localhost:26000"); return true}catch(e){return false}}, "timed out connecting")'
./bin/mongo --port 26000 --eval 'rs.initiate()'
echo "mongod is up."
"setup_baas_server":
- command: shell.exec
params:
shell: "bash"
script: |
wget --quiet "${libmongo_url}"
chmod +x libmongo.so
- command: shell.exec
params:
shell: "bash"
script: |
git clone git@github.com:10gen/baas.git
- command: shell.exec
params:
shell: "bash"
script: |
set -e
cd baas
mkdir -p etc/dylib
cd etc/dylib
curl -s "${baas_supportlib_url}" | tar xvfz - --strip-components=1
- command: shell.exec
params:
shell: "bash"
script: |
set -e
mkdir -p baas/etc/transpiler/bin
cp baas_artifacts/transpiler baas/etc/transpiler/bin/
"start_server":
- command: shell.exec
params:
shell: "bash"
background: true
script: |
export ROOT_DIR=`pwd`
export PATH="$ROOT_DIR:$PATH"
export GOROOT=$ROOT_DIR/go
export PATH=$GOROOT/bin:$PATH
cd $ROOT_DIR/baas
export PATH="$ROOT_DIR/baas/etc/transpiler/bin:$PATH"
export LD_LIBRARY_PATH="$ROOT_DIR/baas/etc/dylib/lib"
export AWS_ACCESS_KEY_ID='${baas_test_aws_key}'
export AWS_SECRET_ACCESS_KEY='${baas_test_aws_secret}'
go run cmd/server/main.go --configFile $ROOT_DIR/baas/etc/configs/test_cli_config.json
- command: shell.exec
params:
shell: "bash"
script: |
counter=0
until $(curl --output /dev/null --silent --head --fail ${realm_server_url}); do
echo "checking for API server to be up..."
sleep 1
let counter++
if [ $counter -gt 100 ]; then
exit 1
fi
done
tasks:
- name: test_unit
exec_timeout_secs: 3600
commands:
- func: "fetch_go"
vars:
go_url: ${go_115_url}
- func: "setup_project"
- command: shell.exec
params:
shell: "bash"
script: |
set -v
set -e
export ROOT_DIR=`pwd`
export PATH="$ROOT_DIR:$PATH"
export PATH="$ROOT_DIR/realm-cli/etc/bin:$PATH"
export GOROOT=$ROOT_DIR/go
export PATH=$GOROOT/bin:$PATH
cd $ROOT_DIR/realm-cli
go test -v -covermode=count -coverprofile=$ROOT_DIR/cover.out $(go list github.com/10gen/realm-cli/...) > $ROOT_DIR/realm-cli.suite
- command: s3.put
params:
aws_key: ${test_aws_key}
aws_secret: ${test_aws_secret}
local_file: cover.out
remote_file: ${task_id}/cover.out
bucket: baas-test-artifacts
content_type: text/plain
permissions: public-read
- name: test_e2e
exec_timeout_secs: 3600
commands:
- func: "fetch_go"
vars:
go_url: ${go_115_url}
- func: "setup_project"
- command: shell.exec
params:
shell: "bash"
script: |
set -v
set -e
export ROOT_DIR=`pwd`
export PATH="$ROOT_DIR:$PATH"
export PATH="$ROOT_DIR/realm-cli/etc/bin:$PATH"
export GOROOT=$ROOT_DIR/go
export PATH=$GOROOT/bin:$PATH
cd $ROOT_DIR/realm-cli
go test -v -covermode=count -coverprofile=$ROOT_DIR/cover.out $(go list github.com/10gen/realm-cli/e2e/...) > $ROOT_DIR/realm-cli.suite
- command: s3.put
params:
aws_key: ${test_aws_key}
aws_secret: ${test_aws_secret}
local_file: cover.out
remote_file: ${task_id}/cover.out
bucket: baas-test-artifacts
content_type: text/plain
permissions: public-read
- name: test_with_cloud
exec_timeout_secs: 3600
commands:
- func: "fetch_go"
vars:
go_url: ${go_117_url}
- func: "fetch_baas_artifacts"
- func: "setup_node"
- func: "setup_project"
- func: "setup_mongod"
- func: "setup_baas_server"
- func: "start_server"
- command: shell.exec
params:
shell: "bash"
script: |
set -v
set -e
export ROOT_DIR=`pwd`
export PATH="$ROOT_DIR:$PATH"
export GOROOT=$ROOT_DIR/go
export PATH=$GOROOT/bin:$PATH
export BAAS_NO_SKIP_TEST=1
export BAAS_MONGODB_CLOUD_GROUP_COUNT="${baas_mongodb_cloud_group_count}"
export BAAS_MONGODB_CLOUD_GROUP_ID="${baas_mongodb_cloud_group_id}"
export BAAS_MONGODB_CLOUD_USERNAME="${baas_mongodb_cloud_username}"
export BAAS_MONGODB_CLOUD_API_KEY="${baas_mongodb_cloud_api_key}"
export BAAS_MONGODB_CLOUD_ADMIN_USERNAME="${baas_mongodb_cloud_admin_username}"
export BAAS_MONGODB_CLOUD_ADMIN_API_KEY="${baas_mongodb_cloud_admin_api_key}"
export BAAS_MONGODB_CLOUD_API_BASE_URL="${atlas_server_url}"
export BAAS_MONGODB_EXPIRED_ACCESS_TOKEN="${baas_mongodb_expired_access_token}"
export BAAS_SERVER_BASE_URL="${realm_server_url}"
cd $ROOT_DIR/realm-cli
go test -v -covermode=count -coverprofile=$ROOT_DIR/cover.out $(go list github.com/10gen/realm-cli/internal/cloud/...) -timeout 25m > $ROOT_DIR/realm-cli.suite
- command: s3.put
params:
aws_key: ${test_aws_key}
aws_secret: ${test_aws_secret}
local_file: cover.out
remote_file: ${task_id}/cover.out
bucket: baas-test-artifacts
content_type: text/plain
permissions: public-read
- name: lint
commands:
- func: "fetch_go"
vars:
go_url: ${go_115_url}
- func: "setup_project"
- command: shell.exec
params:
shell: "bash"
script: |
export ROOT_DIR=`pwd`
export GOROOT=$ROOT_DIR/go
export PATH=$GOROOT/bin:$PATH
cd $ROOT_DIR/realm-cli
go run github.com/golangci/golangci-lint/cmd/golangci-lint run ./...
- name: build_publish_clis
depends_on:
- name: lint
- name: test_unit
- name: test_with_cloud
- name: test_e2e
patchable: false
commands:
- func: "fetch_go"
vars:
go_url: ${go_115_url}
- func: "setup_project"
- command: shell.exec
params:
shell: "bash"
script: |
set -e
export ROOT_DIR=`pwd`
export PATH="$ROOT_DIR:$PATH"
export GOROOT=$ROOT_DIR/go
export PATH=$GOROOT/bin:$PATH
cd $ROOT_DIR/realm-cli
curl https://stedolan.github.io/jq/download/linux64/jq > jq && chmod +x jq
export VERSION=`cat package.json | ./jq '.version' | sed -e 's/^"//' -e 's/"$//'`
export GOARCH=amd64
export SEGMENT_WRITE_KEY="${realm_cli_segment_write_key}"
export GOOS=linux
export OSARCH=linux-amd64
echo "Building realm-cli for $GOOS on $GOARCH"
REPLACE_VARS="-ldflags \"-X github.com/10gen/realm-cli/internal/cli.Version=$VERSION -X github.com/10gen/realm-cli/internal/cli.OSArch=$OSARCH -X github.com/10gen/realm-cli/internal/telemetry.segmentWriteKey=$SEGMENT_WRITE_KEY\""
eval go build $REPLACE_VARS -o realm-cli-linux-amd64 main.go
export GOOS=darwin
export OSARCH=macos-amd64
REPLACE_VARS="-ldflags \"-X github.com/10gen/realm-cli/internal/cli.Version=$VERSION -X github.com/10gen/realm-cli/internal/cli.OSArch=$OSARCH -X github.com/10gen/realm-cli/internal/telemetry.segmentWriteKey=$SEGMENT_WRITE_KEY\""
echo "Building realm-cli for $GOOS on $GOARCH"
eval go build $REPLACE_VARS -o realm-cli-macos-amd64 main.go
export GOOS=windows
export OSARCH=windows-amd64
REPLACE_VARS="-ldflags \"-X github.com/10gen/realm-cli/internal/cli.Version=$VERSION -X github.com/10gen/realm-cli/internal/cli.OSArch=$OSARCH -X github.com/10gen/realm-cli/internal/telemetry.segmentWriteKey=$SEGMENT_WRITE_KEY\""
echo "Building realm-cli for $GOOS on $GOARCH"
eval go build $REPLACE_VARS -o realm-cli-windows-amd64 main.go
- command: s3.put
params:
aws_key: ${artifacts_aws_key}
aws_secret: ${artifacts_aws_secret}
local_file: realm-cli/realm-cli-linux-amd64
remote_file: ${build_id}/linux-amd64/realm-cli
bucket: realm-clis
content_type: application/octet-stream
permissions: public-read
- command: s3.put
params:
aws_key: ${artifacts_aws_key}
aws_secret: ${artifacts_aws_secret}
local_file: realm-cli/realm-cli-macos-amd64
remote_file: ${build_id}/macos-amd64/realm-cli
bucket: realm-clis
content_type: application/octet-stream
permissions: public-read
- command: s3.put
params:
aws_key: ${artifacts_aws_key}
aws_secret: ${artifacts_aws_secret}
local_file: realm-cli/realm-cli-windows-amd64
remote_file: ${build_id}/windows-amd64/realm-cli.exe
bucket: realm-clis
content_type: application/octet-stream
permissions: public-read
- name: release_tag
depends_on:
- name: lint
- name: test_unit
- name: test_with_cloud
- name: test_e2e
- name: build_publish_clis
patchable: false
commands:
- func: "setup_node"
- func: "setup_project"
- command: s3.get
params:
aws_key: ${artifacts_aws_key}
aws_secret: ${artifacts_aws_secret}
remote_file: versions/cloud-prod/CURRENT
bucket: realm-clis
local_file: manifest.json
- command: shell.exec
params:
shell: "bash"
script: |
set -e
cd realm-cli
curl https://stedolan.github.io/jq/download/linux64/jq > jq && chmod +x jq
export VERSION=`cat package.json | ./jq '.version' | sed -e 's/^"//' -e 's/"$//'`
if [ "${branch_name}" != "master" ]; then
echo "skipping release: not on master branch"
exit 0
fi
if [ $(git tag -l "v$VERSION") ]; then
echo "skipping release: tag already exists"
exit 0
fi
echo "updating manifest"
./contrib/manifest.js ${build_id} $VERSION ../manifest.json
echo "tagging release: v$VERSION"
PREVIOUS_VERSION=$(git describe --tags $(git rev-list --tags --max-count=1))
BODY=$(git log --no-merges $PREVIOUS_VERSION..HEAD --pretty="format:%s (%h); %an" | sed '$d')
git tag -a -m "Changelog since $PREVIOUS_VERSION:" -m "$BODY" "v$VERSION"
git push origin master --tags
touch release.true
- command: s3.put
params:
aws_key: ${artifacts_aws_key}
aws_secret: ${artifacts_aws_secret}
local_file: manifest.json
remote_file: versions/cloud-prod/CURRENT
bucket: realm-clis
content_type: application/octet-stream
permissions: public-read
- command: shell.exec
params:
shell: "bash"
silent: true
script: |
set -e
cd realm-cli
if [ ! -f release.true ]; then
# not a release build
exit 0
fi
cat > .npmrc <<EOL
_auth = ${npm_auth}
always-auth = true
email = ${npm_email}
registry=${npm_registry}
EOL
- command: shell.exec
params:
shell: "bash"
script: |
set -e
cd realm-cli
if [ ! -f release.true ]; then
# not a release build
exit 0
fi
echo "publishing release to npm"
npm publish --unsafe-perm
post:
- command: gotest.parse_files
params:
files: ["*.suite"]
buildvariants:
- name: rhel70
display_name: rhel70
run_on:
- rhel70
expansions:
atlas_server_url: "https://cloud-dev.mongodb.com"
baas_supportlib_url: "https://s3.amazonaws.com/stitch-artifacts/stitch-support/stitch-support-rhel-70-4.3.2-721-ge791a2e-patch-5e2a6ad2a4cf473ae2e67b09.tgz"
go_115_url: "https://dl.google.com/go/go1.15.11.linux-amd64.tar.gz"
go_117_url: "https://dl.google.com/go/go1.17.2.linux-amd64.tar.gz"
libmongo_url: "https://stitch-artifacts.s3.amazonaws.com/stitch-mongo-libs/stitch_mongo_libs_linux_64_patch_f323e4411e1b2d9011b88d7f6855654c8432f2ee_6179e0e92a60ed55e5ecc820_21_10_27_23_30_03/libmongo.so"
mongodb_url: "https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.2.tgz"
realm_server_url: "http://localhost:9090"
yarn_url: "https://s3.amazonaws.com/stitch-artifacts/yarn/latest.tar.gz"
node_version: 12.16.2
tasks:
- name: test_unit
- name: test_with_cloud
- name: test_e2e
- name: lint
- name: build_publish_clis
- name: release_tag