220 lines
6.3 KiB
Bash
220 lines
6.3 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
setup_file() {
|
|
load "$PWD/tests/integration/helpers/common"
|
|
_common_setup
|
|
_add_server
|
|
_new_app
|
|
}
|
|
|
|
teardown_file() {
|
|
_rm_server
|
|
_reset_recipe
|
|
}
|
|
|
|
setup() {
|
|
load "$PWD/tests/integration/helpers/common"
|
|
_common_setup
|
|
_set_git_author
|
|
}
|
|
|
|
teardown() {
|
|
_reset_recipe
|
|
_reset_tags
|
|
if [[ -d "$ABRA_DIR/recipes/foobar" ]]; then
|
|
run rm -rf "$ABRA_DIR/recipes/foobar"
|
|
assert_success
|
|
fi
|
|
if [[ -d "$ABRA_DIR/origin-recipes/foobar.git" ]]; then
|
|
run rm -rf "$ABRA_DIR/origin-recipes/foobar.git"
|
|
assert_success
|
|
fi
|
|
}
|
|
|
|
@test "validate recipe argument" {
|
|
run $ABRA recipe release --no-input
|
|
assert_failure
|
|
|
|
run $ABRA recipe release DOESNTEXIST --no-input
|
|
assert_failure
|
|
}
|
|
|
|
@test "release patch bump" {
|
|
run $ABRA recipe upgrade "$TEST_RECIPE" --no-input --patch --commit
|
|
assert_success
|
|
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" show
|
|
assert_success
|
|
assert_output --partial 'image: nginx:1.21.6'
|
|
|
|
# NOTE(d1): ensure the latest tag is the one we expect
|
|
_remove_tags
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" tag \
|
|
-a "0.3.0+1.21.0" -m "fake: 0.3.0+1.21.0"
|
|
assert_success
|
|
|
|
run $ABRA recipe release "$TEST_RECIPE" --no-input --patch
|
|
assert_success
|
|
assert_output --partial 'INFO new release published:'
|
|
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" tag --list
|
|
assert_success
|
|
assert_output --partial '0.3.1+1.21.6'
|
|
}
|
|
|
|
@test "release minor bump" {
|
|
run $ABRA recipe upgrade "$TEST_RECIPE" --no-input --minor --commit
|
|
assert_success
|
|
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" show
|
|
assert_success
|
|
assert_output --regexp 'image: nginx:1.2.*'
|
|
|
|
# NOTE(d1): ensure the latest tag is the one we expect
|
|
_remove_tags
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" tag \
|
|
-a "0.3.0+1.21.0" -m "fake: 0.3.0+1.21.0"
|
|
assert_success
|
|
|
|
run $ABRA recipe release "$TEST_RECIPE" --no-input --minor
|
|
assert_success
|
|
assert_output --partial 'INFO new release published:'
|
|
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" tag --list
|
|
assert_success
|
|
assert_output --regexp '0\.4\.0\+1\.2.*'
|
|
}
|
|
|
|
@test "release with unstaged changes" {
|
|
run bash -c 'echo "# unstaged changes" >> "$ABRA_DIR/recipes/$TEST_RECIPE/compose.yml"'
|
|
assert_success
|
|
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" diff --quiet
|
|
assert_failure
|
|
|
|
run $ABRA recipe release "$TEST_RECIPE" --no-input --patch
|
|
assert_failure
|
|
assert_output --partial "working directory not clean"
|
|
}
|
|
|
|
@test "release with staged changes" {
|
|
run bash -c 'echo "# staged changes" >> "$ABRA_DIR/recipes/$TEST_RECIPE/compose.yml"'
|
|
assert_success
|
|
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" add compose.yml
|
|
assert_success
|
|
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" diff --quiet --cached
|
|
assert_failure
|
|
|
|
run $ABRA recipe release "$TEST_RECIPE" --no-input --patch
|
|
assert_failure
|
|
assert_output --partial "working directory not clean"
|
|
}
|
|
|
|
@test "release with next release note" {
|
|
_mkfile "$ABRA_DIR/recipes/$TEST_RECIPE/release/next" "those are some release notes for the next release"
|
|
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" checkout main
|
|
assert_success
|
|
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" add release/next
|
|
assert_success
|
|
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" commit -m "added some release notes"
|
|
assert_success
|
|
|
|
run $ABRA recipe release "$TEST_RECIPE" --no-input --minor
|
|
assert_success
|
|
assert_output --partial 'new release published:'
|
|
|
|
assert_not_exists "$ABRA_DIR/recipes/$TEST_RECIPE/release/next"
|
|
assert_exists "$ABRA_DIR/recipes/$TEST_RECIPE/release/0.4.0+1.21.0"
|
|
assert_file_contains "$ABRA_DIR/recipes/$TEST_RECIPE/release/0.4.0+1.21.0" "those are some release notes for the next release"
|
|
}
|
|
|
|
@test "recipe release conflict fails" {
|
|
tagHash=$(_get_tag_hash "0.2.0+1.21.0")
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" checkout "$tagHash"
|
|
assert_success
|
|
|
|
run sed -i "s/nginx:1.21.0/nginx:1.29.1/g" "$ABRA_DIR/recipes/$TEST_RECIPE/compose.yml"
|
|
assert_success
|
|
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" diff
|
|
assert_success
|
|
assert_output --regexp 'nginx:1.29.1'
|
|
|
|
run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" commit -am "updated nginx"
|
|
assert_success
|
|
|
|
run $ABRA recipe release "$TEST_RECIPE" --no-input "0.2.0+1.29.1"
|
|
assert_failure
|
|
assert_output --partial '0.2.0+... conflicts with a previous release: 0.2.0+1.21.0'
|
|
}
|
|
|
|
@test "error if recipe release --no-input and no initial version" {
|
|
_remove_tags
|
|
|
|
run $ABRA recipe release "$TEST_RECIPE" --no-input --patch
|
|
assert_failure
|
|
assert_output --partial 'unable to continue'
|
|
assert_output --partial 'initial version'
|
|
}
|
|
|
|
@test "recipe release without input fails with prompt" {
|
|
run $ABRA recipe new foobar
|
|
assert_success
|
|
assert_exists "$ABRA_DIR/recipes/foobar"
|
|
|
|
run $ABRA recipe release foobar --no-input --patch
|
|
assert_failure
|
|
assert_output --partial "input required for initial version"
|
|
}
|
|
|
|
@test "release new recipe: fail without input" {
|
|
run $ABRA recipe new foobar
|
|
assert_success
|
|
assert_exists "$ABRA_DIR/recipes/foobar"
|
|
|
|
run bash -c "$ABRA recipe release foobar --no-input"
|
|
assert_failure
|
|
assert_output --partial 'unable to continue, input required for initial version'
|
|
}
|
|
|
|
# note: piping 0.1.0 from stdin is not testable right now because release notes also wants input
|
|
# survey lib used for prompts breaks multi-line stdin for multi-prompt
|
|
@test "release new recipe: development release" {
|
|
run $ABRA recipe new foobar
|
|
assert_success
|
|
assert_exists "$ABRA_DIR/recipes/foobar"
|
|
|
|
# fake origin
|
|
git clone "$ABRA_DIR/recipes/foobar" "$ABRA_DIR/origin-recipes/foobar.git" --bare
|
|
assert_success
|
|
|
|
run git -C "$ABRA_DIR/recipes/foobar" remote add origin-ssh "$ABRA_DIR/origin-recipes/foobar.git"
|
|
assert_success
|
|
|
|
run bash -c "$ABRA recipe release foobar 0.1.0+1.2.0 --no-input"
|
|
assert_success
|
|
assert_output --regexp 'coop-cloud\.\$\{STACK_NAME\}\.version=0\.1\.0\+1\.2.*'
|
|
}
|
|
|
|
@test "release newly created recipe with no version label" {
|
|
run $ABRA recipe new foobar
|
|
assert_success
|
|
assert_exists "$ABRA_DIR/recipes/foobar"
|
|
|
|
run sed -i 's/- "coop-cloud.${STACK_NAME}.version="/#- "coop-cloud.${STACK_NAME}.version="/g' \
|
|
"$ABRA_DIR/recipes/foobar/compose.yml"
|
|
assert_success
|
|
|
|
run git -C "$ABRA_DIR/recipes/foobar" commit -am "updated nginx"
|
|
assert_success
|
|
|
|
run bash -c "echo 0.1.0 | $ABRA recipe release foobar --patch"
|
|
assert_failure
|
|
assert_output --partial "automagic insertion not supported yet"
|
|
}
|