feat: git-based nightly versions
This commit is contained in:
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
[tool.bumpversion]
|
[tool.bumpversion]
|
||||||
current_version = "26.8.0"
|
current_version = "0.0.0"
|
||||||
parse = """(?x)
|
parse = """(?x)
|
||||||
(?P<release>
|
(?P<release>
|
||||||
(?:[1-9][0-9]?)\\. # YY short year, no leading zero
|
(?:[1-9][0-9]?)\\. # YY short year, no leading zero
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
check:
|
check:
|
||||||
runs-on: pixi-build-rust
|
runs-on: pixi-build-rust
|
||||||
|
env:
|
||||||
|
CARGO_TARGET_DIR: /opt/cargo-target/${{ gitea.repository }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ env:
|
|||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
runs-on: pixi-build-rust
|
runs-on: pixi-build-rust
|
||||||
|
env:
|
||||||
|
CARGO_TARGET_DIR: /opt/cargo-target/${{ gitea.repository }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
env:
|
env:
|
||||||
|
CARGO_TARGET_DIR: /opt/cargo-target/${{ gitea.repository }}
|
||||||
API: ${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}
|
API: ${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}
|
||||||
TOKEN: ${{ secrets.GITEA_TOKEN }}
|
TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
TAG: nightly
|
TAG: nightly
|
||||||
@@ -21,6 +22,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
fetch-tags: true
|
||||||
|
|
||||||
- name: Install the pinned toolchain
|
- name: Install the pinned toolchain
|
||||||
run: pixi install
|
run: pixi install
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
env:
|
env:
|
||||||
|
CARGO_TARGET_DIR: /opt/cargo-target/${{ gitea.repository }}
|
||||||
API: ${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}
|
API: ${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}
|
||||||
TOKEN: ${{ secrets.GITEA_TOKEN }}
|
TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
TAG: ${{ gitea.ref_name }}
|
TAG: ${{ gitea.ref_name }}
|
||||||
|
|||||||
@@ -12,8 +12,7 @@ jobs:
|
|||||||
sync:
|
sync:
|
||||||
runs-on: github-readme-sync
|
runs-on: github-readme-sync
|
||||||
steps:
|
steps:
|
||||||
- name: Check out the Gitea repo
|
- uses: actions/checkout@v4
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Build the combined README
|
- name: Build the combined README
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "coursebank"
|
name = "coursebank"
|
||||||
version = "26.8.0"
|
version = "0.0.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.85"
|
rust-version = "1.85"
|
||||||
description = "Author, assemble, administer, and analyze leveled course assessments from YAML item banks"
|
description = "Author, assemble, administer, and analyze leveled course assessments from YAML item banks"
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||||
|
// Copyright Scientific Computing Studio
|
||||||
|
// Source: https://git.scient.ing/education/coursebank
|
||||||
|
|
||||||
|
//! Chooses the version string compiled into the binary.
|
||||||
|
//!
|
||||||
|
//! Normal and release builds use the version from `Cargo.toml`. Nightly builds
|
||||||
|
//! set `COURSEBANK_VERSION` (to a git-derived string; see
|
||||||
|
//! `scripts/nightly-version.sh`) so `coursebank --version` reflects how far the
|
||||||
|
//! build is past the last release rather than an unreleased number.
|
||||||
|
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let version = match env::var("COURSEBANK_VERSION") {
|
||||||
|
Ok(v) if !v.trim().is_empty() => v,
|
||||||
|
_ => env::var("CARGO_PKG_VERSION").expect("cargo always sets CARGO_PKG_VERSION"),
|
||||||
|
};
|
||||||
|
println!("cargo:rustc-env=COURSEBANK_VERSION={version}");
|
||||||
|
println!("cargo:rerun-if-env-changed=COURSEBANK_VERSION");
|
||||||
|
println!("cargo:rerun-if-env-changed=CARGO_PKG_VERSION");
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
[workspace]
|
[workspace]
|
||||||
name = "coursebank"
|
name = "coursebank"
|
||||||
version = "26.8.0"
|
version = "0.0.0"
|
||||||
authors = ["Scientific Computing Studio <opensource@scient.ing>"]
|
authors = ["Scientific Computing Studio <opensource@scient.ing>"]
|
||||||
channels = ["conda-forge"]
|
channels = ["conda-forge"]
|
||||||
platforms = ["linux-64", "osx-arm64", "osx-64"]
|
platforms = ["linux-64", "osx-arm64", "osx-64"]
|
||||||
|
|||||||
Executable
+27
@@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Print an auto-generated nightly version string derived from git history:
|
||||||
|
#
|
||||||
|
# <last-release-tag>+<commits-since>.g<short-sha> e.g., 26.8.0+14.gb1a2c3d4
|
||||||
|
#
|
||||||
|
# When no release has been tagged yet, the base is 0.0.0 and the count is the
|
||||||
|
# total number of commits:
|
||||||
|
#
|
||||||
|
# 0.0.0+<total-commits>.g<short-sha> e.g., 0.0.0+57.gb1a2c3d4
|
||||||
|
#
|
||||||
|
# The `+...` part is SemVer build metadata, so the string stays a valid version
|
||||||
|
# and never sorts ahead of the release it is based on. Needs full history and
|
||||||
|
# tags (check out with fetch-depth: 0 and fetch-tags: true). Release tags are
|
||||||
|
# matched as N.N.N; the moving `nightly` tag is ignored.
|
||||||
|
set -euo pipefail
|
||||||
|
sha="$(git rev-parse --short=8 HEAD)"
|
||||||
|
if desc="$(git describe --tags --long \
|
||||||
|
--match '[0-9]*.[0-9]*.[0-9]*' --exclude nightly 2>/dev/null)"; then
|
||||||
|
# desc is <tag>-<n>-g<hash>; the tag itself has no '-', so strip from the right.
|
||||||
|
rest="${desc%-g*}" # <tag>-<n>
|
||||||
|
n="${rest##*-}" # <n>
|
||||||
|
tag="${rest%-*}" # <tag>
|
||||||
|
echo "${tag}+${n}.g${sha}"
|
||||||
|
else
|
||||||
|
n="$(git rev-list --count HEAD)"
|
||||||
|
echo "0.0.0+${n}.g${sha}"
|
||||||
|
fi
|
||||||
+2
-2
@@ -27,7 +27,7 @@ use coursebank::store;
|
|||||||
|
|
||||||
/// Manage course item banks, assessments, and the analysis that comes back.
|
/// Manage course item banks, assessments, and the analysis that comes back.
|
||||||
#[derive(Debug, Parser)]
|
#[derive(Debug, Parser)]
|
||||||
#[command(name = "coursebank", version, about, long_about = None)]
|
#[command(name = "coursebank", version = env!("COURSEBANK_VERSION"), about, long_about = None)]
|
||||||
pub(crate) struct Cli {
|
pub(crate) struct Cli {
|
||||||
/// Course directory, the one holding course.yaml.
|
/// Course directory, the one holding course.yaml.
|
||||||
#[arg(long, short = 'C', global = true, default_value = ".")]
|
#[arg(long, short = 'C', global = true, default_value = ".")]
|
||||||
@@ -584,4 +584,4 @@ mod tests {
|
|||||||
fn the_cli_rejects_an_unknown_subcommand() {
|
fn the_cli_rejects_an_unknown_subcommand() {
|
||||||
assert!(Cli::try_parse_from(["coursebank", "frobnicate"]).is_err());
|
assert!(Cli::try_parse_from(["coursebank", "frobnicate"]).is_err());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user