-
Notifications
You must be signed in to change notification settings - Fork 573
/
Copy pathprepare-release.sh
executable file
·76 lines (63 loc) · 2.15 KB
/
prepare-release.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/bin/bash
# This script is used to prepare a release of the dev containers.
# It will bump the version of the manifest.json file and run the devcontainer upgrade command.
# It will only run on the images that have been modified since the last release.
# If no commit hash (of last release) is provided, it will run in monthly release mode and bump the version of all images.
# Example adhoc release: ./build/prepare-release.sh 1c6f558dc86aafd7749074ec44e238f331303517
# Example monthly release: ./build/prepare-release.sh
SCRIPT_SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
SRC_DIR=$(readlink -m $SCRIPT_SOURCE_DIR/../src)
MANIFEST_FILE="manifest.json"
COMMIT_HASH=$1
get_modified_images() {
git diff --name-only --diff-filter=ACMRTUB ${COMMIT_HASH} HEAD ${SRC_DIR} | while read file; do
if [ ! -z $file ]; then
commitMessage=$(git log -1 $file)
# omit auto commits from bot
if [[ $commitMessage != *"Dev containers Bot"* ]]; then
# only get the top level directory for the image
if [ $(echo $file | tr "/" "\n" | wc -l) -eq 3 ]; then
readlink -m $(dirname $file)
fi
fi
fi
done | sort | uniq
}
get_all_images() {
find $SRC_DIR -maxdepth 1 -type d | tail -n +2 | sort | uniq
}
bump_version() {
directory=$1
manifestPath="$directory/$MANIFEST_FILE"
version=$(grep -oP '(?<="version": ")[^"]*' $manifestPath)
newVersion=$(echo $version | awk -F. -v OFS=. '{$NF += 1 ; print}')
sed -i "s/\"version\": \"$version\"/\"version\": \"$newVersion\"/g" $manifestPath
}
release_image() {
image=$1
echo "-----------------------------------------------"
echo "Releasing image $image"
echo "-----------------------------------------------"
bump_version $image
rm "${image}/.devcontainer/devcontainer-lock.json"
devcontainer upgrade --workspace-folder $image
}
adhoc_release() {
for image in $(get_modified_images); do
release_image $image
done
}
monthly_release() {
for image in $(get_all_images); do
release_image $image
done
}
main() {
if [ "$COMMIT_HASH" == "" ]; then
echo "No commit hash provided, running in monthly release mode"
monthly_release
else
adhoc_release
fi
}
main