ci: pin march to x86-64-v2, drop upload-artifact to v3
Some checks failed
CI / build-test-release (pull_request) Failing after 12m27s

Two CI fixes from run #276 (got all the way through tests + mingw cross-
compile + packaging, only failed on artifact upload):

march: workflow now sets CRAFTER_BUILD_MARCH=x86-64-v2 / MTUNE=generic;
project.cpp reads both and applies them to the lib + exe Configurations
so the self-rebuild and mingw cross-compile honor the same baseline.
v3 is unusable on the runner — Intel N5105 (Tremont) has no AVX2, so
a v3 bootstrap binary wouldn't even start. v2 (SSE4.2) runs on the SBC
and on every x86_64 CPU since ~2011.

upload-artifact: pinned to v3. v4+ uses a GHES-only API that Forgejo
Actions doesn't implement; the v3 action stays on the older API that
Forgejo supports.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jorijn van der Graaf 2026-04-28 23:57:43 +02:00
commit 87a64d3b3c
2 changed files with 24 additions and 1 deletions

View file

@ -11,11 +11,22 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
else if (arg.starts_with("--target=")) target = std::string(arg.substr(std::string_view("--target=").size()));
}
// Honor CRAFTER_BUILD_MARCH/MTUNE so CI (which sets these for portability)
// applies them to both the self-rebuild and the mingw cross-compile —
// otherwise Configuration's "native" defaults bake in the build host's
// CPU and the published artifact's portability becomes accidental.
const char* envMarch = std::getenv("CRAFTER_BUILD_MARCH");
const char* envMtune = std::getenv("CRAFTER_BUILD_MTUNE");
std::string march = (envMarch && *envMarch) ? envMarch : "native";
std::string mtune = (envMtune && *envMtune) ? envMtune : "native";
static auto crafterBuildLib = std::make_unique<Configuration>();
crafterBuildLib->path = "./";
crafterBuildLib->name = "crafter.build-lib";
crafterBuildLib->outputName = "crafter-build";
crafterBuildLib->target = target;
crafterBuildLib->march = march;
crafterBuildLib->mtune = mtune;
crafterBuildLib->type = ConfigurationType::LibraryStatic;
crafterBuildLib->debug = debug;
{
@ -60,6 +71,8 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
cfg.name = "crafter.build-exe";
cfg.outputName = "crafter-build";
cfg.target = target;
cfg.march = march;
cfg.mtune = mtune;
cfg.type = ConfigurationType::Executable;
cfg.debug = debug;
cfg.dependencies = { crafterBuildLib.get() };