diff --git a/flake.nix b/flake.nix index 37a7499..032b329 100644 --- a/flake.nix +++ b/flake.nix @@ -209,41 +209,11 @@ [ "__CHANNEL_LIST__" "__VERSION_FILES__" - "__READ_VERSION__" - "__WRITE_VERSION__" "__POST_VERSION__" ] [ channelList versionFilesScript - '' - if [[ ! -f "$ROOT_DIR/VERSION" ]]; then - echo "Error: missing $ROOT_DIR/VERSION" >&2 - exit 1 - fi - - base_line="$(sed -n '1p' "$ROOT_DIR/VERSION" | tr -d '\r')" - channel_line="$(sed -n '2p' "$ROOT_DIR/VERSION" | tr -d '\r')" - n_line="$(sed -n '3p' "$ROOT_DIR/VERSION" | tr -d '\r')" - - # Backward compatibility: old single-line format. - if [[ -z "$channel_line" ]]; then - printf '%s\n' "$base_line" - elif [[ "$channel_line" == "stable" ]]; then - printf '%s\n' "$base_line" - else - printf '%s-%s.%s\n' "$base_line" "$channel_line" "$n_line" - fi - '' - '' - channel_to_write="$CHANNEL" - n_to_write="''${PRERELEASE_NUM:-1}" - if [[ "$channel_to_write" == "stable" || -z "$channel_to_write" ]]; then - channel_to_write="stable" - n_to_write="0" - fi - printf '%s\n%s\n%s\n' "$BASE_VERSION" "$channel_to_write" "$n_to_write" > "$ROOT_DIR/VERSION" - '' postVersion ] (builtins.readFile ./packages/release/release.sh); diff --git a/packages/release/release.nix b/packages/release/release.nix index a85e0b0..44074af 100644 --- a/packages/release/release.nix +++ b/packages/release/release.nix @@ -30,41 +30,11 @@ let [ "__CHANNEL_LIST__" "__VERSION_FILES__" - "__READ_VERSION__" - "__WRITE_VERSION__" "__POST_VERSION__" ] [ channelList versionFilesScript - '' - if [[ ! -f "$ROOT_DIR/VERSION" ]]; then - echo "Error: missing $ROOT_DIR/VERSION" >&2 - exit 1 - fi - - base_line="$(sed -n '1p' "$ROOT_DIR/VERSION" | tr -d '\r')" - channel_line="$(sed -n '2p' "$ROOT_DIR/VERSION" | tr -d '\r')" - n_line="$(sed -n '3p' "$ROOT_DIR/VERSION" | tr -d '\r')" - - # Backward compatibility: old single-line format. - if [[ -z "$channel_line" ]]; then - printf '%s\n' "$base_line" - elif [[ "$channel_line" == "stable" ]]; then - printf '%s\n' "$base_line" - else - printf '%s-%s.%s\n' "$base_line" "$channel_line" "$n_line" - fi - '' - '' - channel_to_write="$CHANNEL" - n_to_write="''${PRERELEASE_NUM:-1}" - if [[ "$channel_to_write" == "stable" || -z "$channel_to_write" ]]; then - channel_to_write="stable" - n_to_write="0" - fi - printf '%s\n%s\n%s\n' "$BASE_VERSION" "$channel_to_write" "$n_to_write" > "$ROOT_DIR/VERSION" - '' postVersion ] (builtins.readFile ./release.sh); diff --git a/packages/release/release.sh b/packages/release/release.sh index bad0369..96e6ac2 100644 --- a/packages/release/release.sh +++ b/packages/release/release.sh @@ -192,18 +192,65 @@ generate_version_files() { __VERSION_FILES__ } -# ── user-provided hooks ──────────────────────────────────────────────────── +# ── version source (built-in) ────────────────────────────────────────────── do_read_version() { - : - __READ_VERSION__ + if [[ ! -f "$ROOT_DIR/VERSION" ]]; then + local highest_tag="" + while IFS= read -r raw_tag; do + local tag="${raw_tag#v}" + [[ $tag =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$ ]] || continue + + if [[ -z $highest_tag ]]; then + highest_tag="$tag" + continue + fi + + local cmp_status=0 + version_cmp "$tag" "$highest_tag" || cmp_status=$? + [[ $cmp_status -eq 1 ]] && highest_tag="$tag" + done < <(git tag --list) + + [[ -z $highest_tag ]] && highest_tag="0.0.1" + + parse_full_version "$highest_tag" + local channel_to_write="$CHANNEL" + local n_to_write="${PRERELEASE_NUM:-1}" + if [[ $channel_to_write == "stable" || -z $channel_to_write ]]; then + channel_to_write="stable" + n_to_write="0" + fi + + printf '%s\n%s\n%s\n' "$BASE_VERSION" "$channel_to_write" "$n_to_write" > "$ROOT_DIR/VERSION" + log "Initialized $ROOT_DIR/VERSION from highest tag: v$highest_tag" + fi + + local base_line channel_line n_line + base_line="$(sed -n '1p' "$ROOT_DIR/VERSION" | tr -d '\r')" + channel_line="$(sed -n '2p' "$ROOT_DIR/VERSION" | tr -d '\r')" + n_line="$(sed -n '3p' "$ROOT_DIR/VERSION" | tr -d '\r')" + + if [[ -z $channel_line ]]; then + printf '%s\n' "$base_line" + elif [[ $channel_line == "stable" ]]; then + printf '%s\n' "$base_line" + else + printf '%s-%s.%s\n' "$base_line" "$channel_line" "$n_line" + fi } do_write_version() { - : - __WRITE_VERSION__ + local channel_to_write="$CHANNEL" + local n_to_write="${PRERELEASE_NUM:-1}" + if [[ $channel_to_write == "stable" || -z $channel_to_write ]]; then + channel_to_write="stable" + n_to_write="0" + fi + printf '%s\n%s\n%s\n' "$BASE_VERSION" "$channel_to_write" "$n_to_write" > "$ROOT_DIR/VERSION" } +# ── user-provided hook ───────────────────────────────────────────────────── + do_post_version() { : __POST_VERSION__