diff --git a/actions/version/tests/post-version.test.yml b/actions/version/tests/post-version.test.yml new file mode 100644 index 0000000000..2b148f47b2 --- /dev/null +++ b/actions/version/tests/post-version.test.yml @@ -0,0 +1,43 @@ +uses: ./actions/version +id: version +with: + version: "0.4.13.post0" + +after: +- shell: bash + run: | + VERSION_OUTPUT='${{ steps.version.outputs.version }}' + if [[ -z "$VERSION_OUTPUT" ]]; then + echo "fail:Version output is empty" >> "$TEST_OUTPUT" + else + echo "success:Version output: $VERSION_OUTPUT" >> "$TEST_OUTPUT" + fi + + VERSION_VALUE=$(echo "$VERSION_OUTPUT" | jq -r '.version') + IS_DEV=$(echo "$VERSION_OUTPUT" | jq -r '.is_dev') + POST=$(echo "$VERSION_OUTPUT" | jq -r '.post') + NEXT=$(echo "$VERSION_OUTPUT" | jq -r '.next') + + if [[ "$VERSION_VALUE" != "0.4.13.post0" ]]; then + echo "fail:Expected version '0.4.13.post0', got '$VERSION_VALUE'" >> "$TEST_OUTPUT" + else + echo "success:Version value is correct: $VERSION_VALUE" >> "$TEST_OUTPUT" + fi + + if [[ "$IS_DEV" != "false" ]]; then + echo "fail:Expected is_dev 'false', got '$IS_DEV'" >> "$TEST_OUTPUT" + else + echo "success:is_dev flag is correct: $IS_DEV" >> "$TEST_OUTPUT" + fi + + if [[ "$POST" != "0" ]]; then + echo "fail:Expected post '0', got '$POST'" >> "$TEST_OUTPUT" + else + echo "success:post value is correct: $POST" >> "$TEST_OUTPUT" + fi + + if [[ "$NEXT" != "0.4.13.post1-dev" ]]; then + echo "fail:Expected next '0.4.13.post1-dev', got '$NEXT'" >> "$TEST_OUTPUT" + else + echo "success:next value is correct: $NEXT" >> "$TEST_OUTPUT" + fi diff --git a/jq/tests/utils/version-dev.test.yml b/jq/tests/utils/version-dev.test.yml index 980f9697da..8ca8f0af3a 100644 --- a/jq/tests/utils/version-dev.test.yml +++ b/jq/tests/utils/version-dev.test.yml @@ -10,4 +10,5 @@ expected: major: 1 minor: 2 patch: 3 + post: null next: "1.2.3" diff --git a/jq/tests/utils/version-post-bump.test.yml b/jq/tests/utils/version-post-bump.test.yml new file mode 100644 index 0000000000..5af121341d --- /dev/null +++ b/jq/tests/utils/version-post-bump.test.yml @@ -0,0 +1,14 @@ +name: utils::version bumps post release version + +input: "1.2.3.post7" + +module: utils::version + +expected: + version: "1.2.3.post7" + is_dev: false + major: 1 + minor: 2 + patch: 3 + post: 7 + next: "1.2.3.post8-dev" diff --git a/jq/tests/utils/version-post-dev.test.yml b/jq/tests/utils/version-post-dev.test.yml new file mode 100644 index 0000000000..be301cbf9a --- /dev/null +++ b/jq/tests/utils/version-post-dev.test.yml @@ -0,0 +1,14 @@ +name: utils::version parses post development version + +input: "0.4.13.post0-dev" + +module: utils::version + +expected: + version: "0.4.13.post0-dev" + is_dev: true + major: 0 + minor: 4 + patch: 13 + post: 0 + next: "0.4.13.post0" diff --git a/jq/tests/utils/version-post-release.test.yml b/jq/tests/utils/version-post-release.test.yml new file mode 100644 index 0000000000..5cd0f8b411 --- /dev/null +++ b/jq/tests/utils/version-post-release.test.yml @@ -0,0 +1,14 @@ +name: utils::version parses post release version + +input: "0.4.13.post0" + +module: utils::version + +expected: + version: "0.4.13.post0" + is_dev: false + major: 0 + minor: 4 + patch: 13 + post: 0 + next: "0.4.13.post1-dev" diff --git a/jq/tests/utils/version-release.test.yml b/jq/tests/utils/version-release.test.yml index 61e547ba7b..78870a0b81 100644 --- a/jq/tests/utils/version-release.test.yml +++ b/jq/tests/utils/version-release.test.yml @@ -10,4 +10,5 @@ expected: major: 1 minor: 2 patch: 3 + post: null next: "1.2.4-dev" diff --git a/jq/utils.jq b/jq/utils.jq index 897a5af9f1..bdbfedb2c3 100644 --- a/jq/utils.jq +++ b/jq/utils.jq @@ -17,18 +17,27 @@ def bytesize: ; def version: - . + . as $input | endswith("-dev") as $is_dev - | (. | split("-") | .[0] | split(".") | map(tonumber)) as $parts - | (if $is_dev then "\($parts[0]).\($parts[1]).\($parts[2])" - else "\($parts[0]).\($parts[1]).\($parts[2] + 1)-dev" + | ($input | split("-") | .[0]) as $base + | ($base + | capture("^(?[0-9]+)\\.(?[0-9]+)\\.(?[0-9]+)(\\.post(?[0-9]+))?$") + // error("utils::version: unsupported version string: \($input)")) as $match + | ($match.maj | tonumber) as $major + | ($match.min | tonumber) as $minor + | ($match.pat | tonumber) as $patch + | ($match.post | if . == null then null else tonumber end) as $post + | (if $is_dev then $base + elif $post != null then "\($major).\($minor).\($patch).post\($post + 1)-dev" + else "\($major).\($minor).\($patch + 1)-dev" end) as $next | { - version: ., + version: $input, is_dev: $is_dev, - major: $parts[0], - minor: $parts[1], - patch: $parts[2], + major: $major, + minor: $minor, + patch: $patch, + post: $post, next: $next } ;