diff --git a/.github/workflows/BATS.yml b/.github/workflows/BATS.yml new file mode 100644 index 0000000..f9d87c5 --- /dev/null +++ b/.github/workflows/BATS.yml @@ -0,0 +1,22 @@ +--- + +name: BATS + +# yamllint disable-line rule:truthy +on: [push, pull_request, workflow_dispatch] + +jobs: + testjob: + runs-on: ubuntu-22.04 + + steps: + - name: apt-get update + run: sudo apt-get update + + - name: apt-get install + run: sudo apt-get -y install bats + + - uses: actions/checkout@v2 + + - name: run tests + run: bats tests/tests.bats diff --git a/tarball_one_version.sh b/tarball_one_version.sh index 6673525..500ab38 100755 --- a/tarball_one_version.sh +++ b/tarball_one_version.sh @@ -25,7 +25,6 @@ main() local archive_name=sof-bin-"$ver" local gittop; gittop="$(git rev-parse --show-toplevel)" - cd "${gittop}" if test -e "$archive_name"; then die "%s already exists\n" "$archive_name" @@ -33,24 +32,29 @@ main() set -x # Start with a clean git archive - git archive -o _.tar --prefix="$archive_name"/ HEAD + # + ( set -e; local _pwd; _pwd=$(pwd) + cd "${gittop}" # git archive is painful like this + git archive -o "$_pwd"/_.tar --prefix="$archive_name"/ HEAD "${gittop}" + ) tar xf _.tar; rm _.tar # Save the selected version rm -rf _selected_version; mkdir _selected_version mv "$archive_name"/"$path"/*"$ver" _selected_version/ - # Delete all other versions - rm -r "${archive_name:?}"/v[0-9].* + # Select ancillary files + ( set -e + local _pwd; _pwd=$(pwd) + cd "${archive_name:?}" - # Exclude the copy of ourselves (we depend on git) any obsolete - # scripts or other irrelevant stuff - ( cd "${archive_name:?}" - rm tarball*.sh - rm -f README-before-1.7.md go.sh publish.sh - rm -f HOWTO-new-release.md + rm -f README-before-1.7.md + mv install.sh README* LICENCE* Notice* "${_pwd}"/_selected_version/ ) + # Delete everything else + rm -r "${archive_name:?}"/* "${archive_name:?}"/.github/ + # Restore the selected version mv _selected_version/* "$archive_name"/ rmdir _selected_version diff --git a/tarball_topologies_only.sh b/tarball_topologies_only.sh index 1d4042c..eaccb84 100755 --- a/tarball_topologies_only.sh +++ b/tarball_topologies_only.sh @@ -27,14 +27,17 @@ main() local sof_tplg_ver=sof-tplg-"$ver" local gittop; gittop="$(git rev-parse --show-toplevel)" - cd "${gittop}"/"$path" - test -d "$sof_tplg_ver" || + ( set -e; local _pwd; _pwd=$(pwd) + cd "${gittop}"/"$path" + + test -d "$sof_tplg_ver" || die "No %s/%s directory\n" "$(pwd)" "$sof_tplg_ver" - tarfile="$gittop"/"$sof_tplg_ver".tar.gz - set -x - git archive -9 -o "$tarfile" HEAD -- "$sof_tplg_ver" + tarfile="${_pwd}"/"$sof_tplg_ver".tar.gz + set -x + git archive -9 -o "$tarfile" HEAD -- "$sof_tplg_ver" + ) } die() diff --git a/tests/common_helpers.bash b/tests/common_helpers.bash new file mode 100644 index 0000000..1199c59 --- /dev/null +++ b/tests/common_helpers.bash @@ -0,0 +1,32 @@ + +set_constants() +{ + TESTS_DIR=$(cd "$(dirname "$BATS_TEST_FILENAME")" && pwd) + # shellcheck disable=SC2034 + TOP_DIR=$(cd "${TESTS_DIR}"/.. && pwd) + REFS="$TESTS_DIR"/refs/ + EXTR_REFS="$TESTS_DIR"/extracted_refs/ + + GITHUB_RELEASES='https://github.com/thesofproject/sof-bin/releases/download' +} + +# Example: get_release v2.1.1/sof-bin-v2.1.1.tar.gz +get_release() +{ + local tgz; tgz=$(basename "$1") + set_constants + local dirname=${tgz%.tar.gz}; dirname=${dirname%.tgz} + + # 1. Do not re-download the same thing over and over again + # 2. Let the user override for local testing purposes + if test -d "$EXTR_REFS"/"$dirname"/; then return 0; fi + + ( cd "$REFS"/ || exit 1 + # Same logic as above + test -e "$tgz" || wget "$GITHUB_RELEASES"/"$1" + ) + + ( cd "$EXTR_REFS"/ || exit 1 + tar xf "$REFS"/"$tgz" + ) +} diff --git a/tests/tests.bats b/tests/tests.bats new file mode 100644 index 0000000..69fc6da --- /dev/null +++ b/tests/tests.bats @@ -0,0 +1,47 @@ + +# https://bats-core.readthedocs.io/en/stable/tutorial.html + + +setup_file() +{ + load 'common_helpers.bash'; set_constants + mkdir -p "$REFS" "$EXTR_REFS" +} + +setup() +{ + mkdir -p testruns/ + RUN_DIR=$(mktemp --directory testruns/run-XXXXXX) +} + +teardown() +{ + test -d "$RUN_DIR"/ || return 1 + rm -rf "${RUN_DIR:?}"/ +} + +@test "tarball_one_version 2.1.1" { + + pushd "$RUN_DIR"/ + load 'common_helpers.bash'; set_constants + + get_release v2.1.1/sof-bin-v2.1.1.tar.gz + + "$TOP_DIR"/tarball_one_version.sh v2.1.x/v2.1.1 + tar xf sof-bin-v2.1.1.tar.gz + diff -qr "$EXTR_REFS"/sof-bin-v2.1.1 sof-bin-v2.1.1/ + popd +} + +@test "tarball_topologies_only 2.2.1" { + + pushd "$RUN_DIR"/ + load 'common_helpers.bash'; set_constants + + get_release v2.2.1/sof-tplg-v2.2.1.tar.gz + + "$TOP_DIR"/tarball_topologies_only.sh v2.2.x/v2.2.1 + tar xf sof-tplg-v2.2.1.tar.gz + diff -qr "$EXTR_REFS"/sof-tplg-v2.2.1 sof-tplg-v2.2.1/ + popd +}