Skip to content
This repository has been archived by the owner on Dec 27, 2022. It is now read-only.

Commit

Permalink
🚨 shellcheck most ops scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
bohendo committed Oct 19, 2020
1 parent d152654 commit b62ca0b
Show file tree
Hide file tree
Showing 19 changed files with 211 additions and 196 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ config-prod.json
**/.test-store
**/.tmp
**/cache/**
**/*.backup

# Data Storage
**/.bot-store/
Expand Down
4 changes: 2 additions & 2 deletions ops/build-report.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ fi
echo
echo " seconds | module"
echo "---------+----------------"
for step in `ls $flags`
do echo "`cat $flags/$step` $step"
for step in $flags/*
do echo "$(cat "$step") $step" | sed 's/.flags\///'
done | sort -nr | awk '{printf(" %7s | %s\n", $1, $2)}'
15 changes: 8 additions & 7 deletions ops/db.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,28 @@
set -e

root="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )"
project="`cat $root/package.json | grep '"name":' | head -n 1 | cut -d '"' -f 4`"
project="$(grep '"name":' "$root/package.json" | head -n 1 | cut -d '"' -f 4)"

username=$project
database=$project
service=${project}_database
service_id="`docker service ps -q $service | head -n 1`"
service_id="$(docker service ps -q "$service" | head -n 1)"

if [[ -n "$service_id" ]]
then
container_id="`docker inspect --format '{{.Status.ContainerStatus.ContainerID}}' $service_id`"
container_id="$(docker inspect --format '{{.Status.ContainerStatus.ContainerID}}' "$service_id")"
else
container_id="`docker container ls --filter 'status=running' --format '{{.ID}} {{.Names}}' |\
container_id="$(
docker container ls --filter 'status=running' --format '{{.ID}} {{.Names}}' |\
cut -d "." -f 1 |\
grep "_database" |\
sort |\
head -n 1 |\
cut -d " " -f 1
`"
)"
fi

if [[ -z "$1" ]]
then docker exec -it $container_id bash -c "psql $database --username=$username"
else docker exec -it $container_id bash -c "psql $database --username=$username --command=\"$1\""
then docker exec -it "$container_id" bash -c "psql $database --username=$username"
else docker exec -it "$container_id" bash -c "psql $database --username=$username --command=\"$1\""
fi
15 changes: 8 additions & 7 deletions ops/lint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,22 @@ root="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )"
eslint="$root/node_modules/.bin/eslint -c $root/.eslintrc.js"
solhint="$root/node_modules/.bin/solhint -c $root/.solhint.json"

for package in `ls modules`
for packagePath in modules/*
do
package=$(basename "$packagePath")
echo "Linting ${package}"
cd "${root}/modules/${package}"
cd "${root}/modules/${package}" || exit 1
if [[ -d "src" ]]
then
eval "$eslint 'src' $@"
eval "$eslint 'src' $*"
elif [[ -d "src.ts" && -d "src.sol" ]]
then
eval "$eslint 'src.ts' $@"
eval "$solhint 'src.sol/**/*.sol' $@"
eval "$eslint 'src.ts' $*"
eval "$solhint 'src.sol/**/*.sol' $*"
fi
cd "${root}"
cd "${root}" || exit 1
done

if [[ -z "$@" ]]
if [[ -z "$*" ]]
then echo "Protip: run 'bash ops/lint.sh --fix' to auto-fix simple formatting inconsistencies"
fi
18 changes: 9 additions & 9 deletions ops/logs.sh
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
#!/bin/bash
set -e

root="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )"
project="`cat $root/package.json | grep '"name":' | head -n 1 | cut -d '"' -f 4`"
#root="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )"
#project="$(grep '"name":' "$root/package.json" | head -n 1 | cut -d '"' -f 4)"

target=$1
shift

service_id="`docker service ls --format '{{.ID}} {{.Name}}' |\
service_id=$(docker service ls --format '{{.ID}} {{.Name}}' |\
grep "_$target" |\
head -n 1 |\
cut -d " " -f 1
`"
)

if [[ -n "$service_id" ]]
then
docker service ps --no-trunc $service_id
docker service ps --no-trunc "$service_id"
sleep 0.5
exec docker service logs --follow --raw --tail 100 $service_id $@
exec docker service logs --follow --raw --tail 100 "$service_id" "$@"
fi

container_id="`docker container ls --filter 'status=running' --format '{{.ID}} {{.Names}}' |\
container_id=$(docker container ls --filter 'status=running' --format '{{.ID}} {{.Names}}' |\
cut -d "." -f 1 |\
grep "_$target" |\
sort |\
head -n 1 |\
cut -d " " -f 1
`"
)

if [[ -n "$container_id" ]]
then exec docker container logs --tail 100 --follow $container_id $@
then exec docker container logs --tail 100 --follow "$container_id" "$@"
else echo "No service or running container names match: $target"
fi
97 changes: 48 additions & 49 deletions ops/npm-publish.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ default_packages="types,utils,contracts,protocol,engine,browser-node"
packages="${1:-$default_packages}"

root="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )"
project="`cat $root/package.json | grep '"name":' | head -n 1 | cut -d '"' -f 4`"
project=$(grep '"name":' "$root/package.json" | head -n 1 | cut -d '"' -f 4)

########################################
## Helper functions
Expand All @@ -20,7 +20,7 @@ function get_latest_version {
########################################
## Run some sanity checks to make sure we're really ready to npm publish

if [[ ! "`pwd | sed 's|.*/\(.*\)|\1|'`" =~ "$project" ]]
if [[ ! "$(pwd | sed 's|.*/\(.*\)|\1|')" =~ $project ]]
then echo "Aborting: Make sure you're in the $project project root" && exit 1
fi

Expand All @@ -30,17 +30,17 @@ package_names=""
package_versions=""

echo
for package in `echo $packages | tr ',' ' '`
for package in $(echo "$packages" | tr ',' ' ')
do
package_name="`cat modules/$package/package.json | grep '"name":' | awk -F '"' '{print $4}'`"
package_version="`npm view $package_name version 2> /dev/null || echo "0.0.0"`"
package_name="$(grep '"name":' "modules/$package/package.json" | awk -F '"' '{print $4}')"
package_version="$(npm view "$package_name" version 2> /dev/null || echo "0.0.0")"
package_versions="$package_versions $package_version"
package_names="$package_names $package_name@$package_version"
echo "Found previously published npm package: $package_name@$package_version"
done
echo

highest_version="`get_latest_version $package_versions`"
highest_version=$(get_latest_version "$package_versions")

echo "What version of @connext/{$packages} packages are we publishing?"
echo "Currently, latest version: $highest_version"
Expand All @@ -52,13 +52,13 @@ if [[ -z "$target_version" ]]
then echo "Aborting: A new, unique version is required" && exit 1
# elif [[ "$package_versions" =~ "$target_version" ]]
# then echo "Aborting: A new, unique version is required" && exit 1
elif [[ "`get_latest_version $package_versions $target_version`" != "$target_version" ]]
elif [[ "$(get_latest_version "$package_versions" "$target_version")" != "$target_version" ]]
then
for package in `echo $packages | tr ',' ' '`
for package in $(echo "$packages" | tr ',' ' ')
do
package_name="`cat modules/$package/package.json | grep '"name":' | awk -F '"' '{print $4}'`"
package_name="$(grep '"name":' "modules/$package/package.json" | awk -F '"' '{print $4}')"
# make sure this is still a unique version number, even though its old
version_exists="`npm view $package_name@$target_version version 2> /dev/null || echo "0.0.0"`"
version_exists="$(npm view "$package_name@$target_version" version 2> /dev/null || echo "0.0.0")"
if [[ -z "$version_exists" ]]
then echo "Safe to publish $package_name@$target_version"
else echo "Aborting: version $package_name@$target_version already exists" && exit 1
Expand All @@ -80,49 +80,48 @@ if [[ ! "$REPLY" =~ ^[Yy]$ ]]
then echo "Aborting by user request" && exit 1 # abort!
fi

echo "Let's go"
cd modules
( # () designates a subshell so we don't have to cd back to where we started afterwards
echo "Let's go"
cd modules

for package in $package_names
do
echo
echo "Dealing w package: $package"
fullname="${package%@*}" # i.e. '@connext/vector-types'
nickname="${fullname#*/}" # i.e. 'vector-types'
path="${nickname#*-}" # i.e. 'types'
version="$target_version"
echo "Updating $nickname package version to $version"
cd $path
mv package.json .package.json
cat .package.json | sed 's/"version": ".*"/"version": "'$version'"/' > package.json
rm .package.json
echo "Publishing $fullname"

# If the version has a release-candidate suffix like "-rc.2" then tag it as "next"
if [[ "$version" == *-rc* ]]
then npm publish --tag next --access=public
else npm publish --access=public
fi
for package in $package_names
do
echo
echo "Dealing w package: $package"
fullname="${package%@*}" # i.e. '@connext/vector-types'
nickname="${fullname#*/}" # i.e. 'vector-types'
path="${nickname#*-}" # i.e. 'types'
version="$target_version"
echo "Updating $nickname package version to $version"
cd "$path" || exit 1
mv package.json .package.json
sed 's/"version": ".*"/"version": "'"$version"'"/' < .package.json > package.json
rm .package.json
echo "Publishing $fullname"

echo "Updating $fullname references in root"
mv package.json .package.json
cat .package.json | sed 's|"'"$fullname"'": ".*"|"'"$fullname"'": "'$version'"|' > package.json
rm .package.json
# If the version has a release-candidate suffix like "-rc.2" then tag it as "next"
if [[ "$version" == *-rc* ]]
then npm publish --tag next --access=public
else npm publish --access=public
fi

echo
cd ..
for module in `ls */package.json`
do
echo "Updating $fullname references in $module"
cd ${module%/*}
echo "Updating $fullname references in root"
mv package.json .package.json
cat .package.json | sed 's|"'"$fullname"'": ".*"|"'"$fullname"'": "'$version'"|' > package.json
sed 's|"'"$fullname"'": ".*"|"'"$fullname"'": "'"$version"'"|' < .package.json > package.json
rm .package.json

echo
cd ..
for module in */package.json
do (
echo "Updating $fullname references in $module"
cd "${module%/*}"
mv package.json .package.json
sed 's|"'"$fullname"'": ".*"|"'"$fullname"'": "'"$version"'"|' < .package.json > package.json
rm .package.json
) done
done
done

cd ..
)

echo
echo "Commiting & tagging our changes"
Expand All @@ -133,7 +132,7 @@ tag="npm-publish-${1:-"all"}-$target_version"

git add .
git commit --allow-empty -m "npm publish @connext/{$packages}@$target_version"
git tag $tag
git tag "$tag"
git push origin HEAD --no-verify
git push origin $tag --no-verify

git push origin "$tag" --no-verify

23 changes: 11 additions & 12 deletions ops/pull-images.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@
set -e

root="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )"
project="`cat $root/package.json | grep '"name":' | head -n 1 | cut -d '"' -f 4`"
registry="`cat $root/package.json | grep '"registry":' | head -n 1 | cut -d '"' -f 4`"
project=$(grep '"name":' "$root/package.json" | head -n 1 | cut -d '"' -f 4)
registry=$(grep '"registry":' "$root/package.json" | head -n 1 | cut -d '"' -f 4)

commit="`git rev-parse HEAD | head -c 8`"
semver="`cat package.json | grep '"version":' | head -n 1 | cut -d '"' -f 4`"
commit=$(git rev-parse HEAD | head -c 8)
semver=$(grep '"version":' package.json | head -n 1 | cut -d '"' -f 4)

default_images="`
default_images=$(
echo 'auth builder database ethprovider global_proxy nats node node_proxy router router_proxy test_runner' |\
sed "s/^/${project}_/g" |\
sed "s/ / ${project}_/g"
`"
)

# If given an arg like "image_name:version", then try to pull that version of image_name
if [[ -n "$1" && "$1" == *:* ]]
Expand All @@ -31,23 +31,22 @@ do
for version in $versions
do
name="$image:$version"
if [[ -n "`docker image ls | grep "$image" | grep "$version"`" ]]
then
echo "Image $name already exists locally"
if grep -q "$version" <<<"$(docker image ls | grep "$image")"
then echo "Image $name already exists locally"
else

if [[ -n "`echo $name | grep "${project}_"`" ]]
if grep -q "${project}_" <<<"$name"
then full_name="${registry%/}/$name"
else full_name="$name"
fi

echo "Pulling image: $full_name"
docker pull $full_name || true
docker pull "$full_name" || true

if [[ "$name" != "$full_name" ]]
then
echo "Tagging image $full_name as $name"
docker tag $full_name $name || true
docker tag "$full_name" "$name" || true
fi

fi
Expand Down
19 changes: 9 additions & 10 deletions ops/push-images.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,37 @@
set -e

root="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )"
project="`cat $root/package.json | grep '"name":' | head -n 1 | cut -d '"' -f 4`"
registry="`cat $root/package.json | grep '"registry":' | head -n 1 | cut -d '"' -f 4`"
project=$(grep -m 1 '"name":' "$root/package.json" | cut -d '"' -f 4)
registry=$(grep -m 1 '"registry":' "$root/package.json" | cut -d '"' -f 4)

registry_url="https://index.docker.io/v1/repositories/${registry#*/}"
images="auth builder database ethprovider global_proxy nats node node_proxy router router_proxy test_runner"

commit="`git rev-parse HEAD | head -c 8`"
git_tag="`git tag --points-at HEAD | grep "vector-" | head -n 1`"
commit="$(git rev-parse HEAD | head -c 8)"
git_tag="$(git tag --points-at HEAD | grep "vector-" | head -n 1)"

# Try to get the semver from git tag or commit message
if [[ -z "$git_tag" ]]
then
message="`git log --format=%B -n 1 HEAD`"
message="$(git log --format=%B -n 1 HEAD)"
if [[ "$message" == "Deploy vector-"* ]]
then semver="${message#Deploy vector-}"
else semver=""
fi
else semver="`echo $git_tag | sed 's/vector-//'`"
else semver="${git_tag#vector-}"
fi

for image in $images
do
if [[ -n "$semver" ]]
then
echo "Tagging image ${project}_$image:$commit as ${project}_$image:$semver"
docker tag ${project}_$image:$commit ${project}_$image:$semver || true
docker tag "${project}_$image:$commit" "${project}_$image:$semver" || true
fi
for version in latest $commit $semver
do
echo "Tagging image ${project}_$image:$version as $registry/${project}_$image:$version"
docker tag ${project}_$image:$version $registry/${project}_$image:$version || true
docker tag "${project}_$image:$version" "$registry/${project}_$image:$version" || true
echo "Pushing image: $registry/${project}_$image:$version"
docker push $registry/${project}_$image:$version || true
docker push "$registry/${project}_$image:$version" || true
done
done
2 changes: 1 addition & 1 deletion ops/replace.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ bash ops/search.sh "$old" | sed "s|$old|$new|g" | grep --color=always "$new"
echo
echo "Does the above replacement look good? (y/n)"
echo -n "> "
read response
read -r response
echo

if [[ "$response" == "y" ]]
Expand Down
Loading

0 comments on commit b62ca0b

Please sign in to comment.