fix: automate package versions and workspace validation
Validate ShrinkSDK Workspace / unity (push) Failing after 5s
Validate ShrinkSDK Workspace / unity (push) Failing after 5s
This commit is contained in:
@@ -5,6 +5,7 @@ workspace_root="${1:-$PWD}"
|
||||
workspace_root="$(cd "$workspace_root" && pwd)"
|
||||
unity_bin="${UNITY_EDITOR_PATH:-$(command -v unity-editor || command -v unity || command -v Unity || true)}"
|
||||
consumer_root="$workspace_root/Temp/PublishedUpmConsumerValidation"
|
||||
published_catalog="$workspace_root/Tools/UpmConsumerValidation/published-upm-versions.json"
|
||||
|
||||
if [[ ! -f "$workspace_root/ProjectSettings/ProjectVersion.txt" ]]; then
|
||||
echo "Workspace ProjectVersion.txt was not found: $workspace_root" >&2
|
||||
@@ -16,6 +17,39 @@ if [[ -z "$unity_bin" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$published_catalog" ]]; then
|
||||
echo "Published package catalog was not found: $published_catalog" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
published_value() {
|
||||
local package_name="$1"
|
||||
local property_name="$2"
|
||||
node --input-type=module - "$published_catalog" "$package_name" "$property_name" <<'NODE'
|
||||
import { readFileSync } from 'node:fs';
|
||||
|
||||
const [, , catalogPath, packageName, propertyName] = process.argv;
|
||||
const catalog = JSON.parse(readFileSync(catalogPath, 'utf8'));
|
||||
const value = catalog.packages?.[packageName]?.[propertyName];
|
||||
if (typeof value !== 'string' || value.length === 0) {
|
||||
throw new Error(`Published catalog value is missing: ${packageName}.${propertyName}`);
|
||||
}
|
||||
if (propertyName === 'version' && !/^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$/.test(value)) {
|
||||
throw new Error(`Published catalog version is invalid: ${packageName}=${value}`);
|
||||
}
|
||||
process.stdout.write(value);
|
||||
NODE
|
||||
}
|
||||
|
||||
export SHRINKSDK_PUBLISHED_STARTER_VERSION="$(published_value com.cneicy.shrink-app-starter-basic version)"
|
||||
export SHRINKSDK_PUBLISHED_CONTEXT_APP_VERSION="$(published_value com.cneicy.shrink-context-app-adapter version)"
|
||||
export SHRINKSDK_PUBLISHED_CONTEXT_EVENTBUS_VERSION="$(published_value com.cneicy.shrink-context-eventbus-adapter version)"
|
||||
export SHRINKSDK_PUBLISHED_MOD_VERSION="$(published_value com.cneicy.shrink-mod-framework version)"
|
||||
export SHRINKSDK_PUBLISHED_TUTORIAL_VERSION="$(published_value com.cneicy.shrink-tutorial version)"
|
||||
export SHRINKSDK_PUBLISHED_INSTALLER_VERSION="$(published_value com.cneicy.shrink-installer version)"
|
||||
export SHRINKSDK_PUBLISHED_MOD_REPOSITORY="$(published_value com.cneicy.shrink-mod-framework repository)"
|
||||
export SHRINKSDK_PUBLISHED_INSTALLER_REPOSITORY="$(published_value com.cneicy.shrink-installer repository)"
|
||||
|
||||
case "$consumer_root" in
|
||||
"$workspace_root"/Temp/*) ;;
|
||||
*) echo "Consumer project must stay under the workspace Temp directory." >&2; exit 1 ;;
|
||||
@@ -42,19 +76,28 @@ public static class PublishedUpmConsumerValidator
|
||||
{
|
||||
private const string RegistryUrl = "https://git.crash.work/api/packages/ShrinkSDK/npm/";
|
||||
private const string UniTaskUrl = "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#7c0f199fe0d3fc528024488ccd671e6c7b27745b";
|
||||
private static readonly string StarterVersion = RequiredEnvironment("SHRINKSDK_PUBLISHED_STARTER_VERSION");
|
||||
private static readonly string ContextAppVersion = RequiredEnvironment("SHRINKSDK_PUBLISHED_CONTEXT_APP_VERSION");
|
||||
private static readonly string ContextEventBusVersion = RequiredEnvironment("SHRINKSDK_PUBLISHED_CONTEXT_EVENTBUS_VERSION");
|
||||
private static readonly string ModVersion = RequiredEnvironment("SHRINKSDK_PUBLISHED_MOD_VERSION");
|
||||
private static readonly string TutorialVersion = RequiredEnvironment("SHRINKSDK_PUBLISHED_TUTORIAL_VERSION");
|
||||
private static readonly string InstallerVersion = RequiredEnvironment("SHRINKSDK_PUBLISHED_INSTALLER_VERSION");
|
||||
private static readonly string ModRepository = RequiredEnvironment("SHRINKSDK_PUBLISHED_MOD_REPOSITORY");
|
||||
private static readonly string InstallerRepository = RequiredEnvironment("SHRINKSDK_PUBLISHED_INSTALLER_REPOSITORY");
|
||||
|
||||
public static void VerifyRegistry()
|
||||
{
|
||||
Run(() =>
|
||||
{
|
||||
VerifyPackage("com.cneicy.shrink-app-starter-basic", "0.2.2", "ShrinkApp.Starter.Basic.Runtime");
|
||||
VerifyPackage("com.cneicy.shrink-context-app-adapter", "0.1.5", "ShrinkContext.AppAdapter.Runtime");
|
||||
VerifyPackage("com.cneicy.shrink-context-eventbus-adapter", "0.1.1", "ShrinkContext.EventBusAdapter.Runtime");
|
||||
VerifyPackage("com.cneicy.shrink-mod-framework", "0.2.4", "ShrinkModFramework.Runtime");
|
||||
VerifyPackage("com.cneicy.shrink-tutorial", "0.1.3", "ShrinkTutorial.Runtime");
|
||||
RequireManifestValue("com.cneicy.shrink-app-starter-basic", "0.2.2");
|
||||
RequireManifestValue("com.cneicy.shrink-context-eventbus-adapter", "0.1.1");
|
||||
RequireManifestValue("com.cneicy.shrink-mod-framework", "0.2.4");
|
||||
RequireManifestValue("com.cneicy.shrink-tutorial", "0.1.3");
|
||||
VerifyPackage("com.cneicy.shrink-app-starter-basic", StarterVersion, "ShrinkApp.Starter.Basic.Runtime");
|
||||
VerifyPackage("com.cneicy.shrink-context-app-adapter", ContextAppVersion, "ShrinkContext.AppAdapter.Runtime");
|
||||
VerifyPackage("com.cneicy.shrink-context-eventbus-adapter", ContextEventBusVersion, "ShrinkContext.EventBusAdapter.Runtime");
|
||||
VerifyPackage("com.cneicy.shrink-mod-framework", ModVersion, "ShrinkModFramework.Runtime");
|
||||
VerifyPackage("com.cneicy.shrink-tutorial", TutorialVersion, "ShrinkTutorial.Runtime");
|
||||
RequireManifestValue("com.cneicy.shrink-app-starter-basic", StarterVersion);
|
||||
RequireManifestValue("com.cneicy.shrink-context-eventbus-adapter", ContextEventBusVersion);
|
||||
RequireManifestValue("com.cneicy.shrink-mod-framework", ModVersion);
|
||||
RequireManifestValue("com.cneicy.shrink-tutorial", TutorialVersion);
|
||||
RequireManifestValue("com.cysharp.unitask", UniTaskUrl);
|
||||
RequireRegistry("com.cneicy", RegistryUrl);
|
||||
});
|
||||
@@ -64,10 +107,10 @@ public static class PublishedUpmConsumerValidator
|
||||
{
|
||||
Run(() =>
|
||||
{
|
||||
VerifyPackage("com.cneicy.shrink-mod-framework", "0.2.4", "ShrinkModFramework.Runtime");
|
||||
VerifyPackage("com.cneicy.shrink-mod-framework", ModVersion, "ShrinkModFramework.Runtime");
|
||||
RequireManifestValue(
|
||||
"com.cneicy.shrink-mod-framework",
|
||||
"https://git.crash.work/ShrinkSDK/ShrinkModFramework.git#v0.2.4");
|
||||
ModRepository + "#v" + ModVersion);
|
||||
RequireManifestValue("com.cysharp.unitask", UniTaskUrl);
|
||||
RequireRegistry("com.cneicy", RegistryUrl);
|
||||
});
|
||||
@@ -77,10 +120,10 @@ public static class PublishedUpmConsumerValidator
|
||||
{
|
||||
try
|
||||
{
|
||||
VerifyPackage("com.cneicy.shrink-installer", "0.2.4", "ShrinkInstaller.Editor");
|
||||
VerifyPackage("com.cneicy.shrink-installer", InstallerVersion, "ShrinkInstaller.Editor");
|
||||
RequireManifestValue(
|
||||
"com.cneicy.shrink-installer",
|
||||
"https://git.crash.work/ShrinkSDK/Installer.git#v0.2.4");
|
||||
InstallerRepository + "#v" + InstallerVersion);
|
||||
|
||||
var catalog = FindType("ShrinkSDK.Installer.ShrinkSdkPackageCatalog");
|
||||
var starter = catalog.GetField("StarterBasic", BindingFlags.Static | BindingFlags.NonPublic)
|
||||
@@ -94,7 +137,7 @@ public static class PublishedUpmConsumerValidator
|
||||
roots.SetValue(starter, 0);
|
||||
install.Invoke(null, new object[] { roots });
|
||||
|
||||
RequireManifestValue("com.cneicy.shrink-app-starter-basic", "0.2.2");
|
||||
RequireManifestValue("com.cneicy.shrink-app-starter-basic", StarterVersion);
|
||||
RequireManifestValue("com.cysharp.unitask", UniTaskUrl);
|
||||
RequireRegistry("com.cneicy", RegistryUrl);
|
||||
RequireRegistry("com.example", "https://registry.npmjs.org/");
|
||||
@@ -110,10 +153,10 @@ public static class PublishedUpmConsumerValidator
|
||||
{
|
||||
Run(() =>
|
||||
{
|
||||
VerifyPackage("com.cneicy.shrink-installer", "0.2.4", "ShrinkInstaller.Editor");
|
||||
VerifyPackage("com.cneicy.shrink-app-starter-basic", "0.2.2", "ShrinkApp.Starter.Basic.Runtime");
|
||||
VerifyPackage("com.cneicy.shrink-context-app-adapter", "0.1.5", "ShrinkContext.AppAdapter.Runtime");
|
||||
RequireManifestValue("com.cneicy.shrink-app-starter-basic", "0.2.2");
|
||||
VerifyPackage("com.cneicy.shrink-installer", InstallerVersion, "ShrinkInstaller.Editor");
|
||||
VerifyPackage("com.cneicy.shrink-app-starter-basic", StarterVersion, "ShrinkApp.Starter.Basic.Runtime");
|
||||
VerifyPackage("com.cneicy.shrink-context-app-adapter", ContextAppVersion, "ShrinkContext.AppAdapter.Runtime");
|
||||
RequireManifestValue("com.cneicy.shrink-app-starter-basic", StarterVersion);
|
||||
RequireManifestValue("com.cysharp.unitask", UniTaskUrl);
|
||||
RequireRegistry("com.cneicy", RegistryUrl);
|
||||
RequireRegistry("com.example", "https://registry.npmjs.org/");
|
||||
@@ -133,6 +176,12 @@ public static class PublishedUpmConsumerValidator
|
||||
}
|
||||
}
|
||||
|
||||
private static string RequiredEnvironment(string name)
|
||||
{
|
||||
return Environment.GetEnvironmentVariable(name)
|
||||
?? throw new InvalidOperationException("Required environment variable is missing: " + name);
|
||||
}
|
||||
|
||||
private static void VerifyPackage(string packageName, string version, string assemblyName)
|
||||
{
|
||||
var package = PackageInfo.GetAllRegisteredPackages()
|
||||
@@ -261,7 +310,7 @@ rm -rf "$consumer_root"
|
||||
mkdir -p "$consumer_root"
|
||||
|
||||
registry_project="$(prepare_consumer registry)"
|
||||
write_manifest "$registry_project" '{
|
||||
registry_manifest='{
|
||||
"scopedRegistries": [
|
||||
{
|
||||
"name": "ShrinkSDK",
|
||||
@@ -270,18 +319,23 @@ write_manifest "$registry_project" '{
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"com.cneicy.shrink-app-starter-basic": "0.2.2",
|
||||
"com.cneicy.shrink-context-eventbus-adapter": "0.1.1",
|
||||
"com.cneicy.shrink-mod-framework": "0.2.4",
|
||||
"com.cneicy.shrink-tutorial": "0.1.3",
|
||||
"com.cneicy.shrink-app-starter-basic": "__STARTER_VERSION__",
|
||||
"com.cneicy.shrink-context-eventbus-adapter": "__CONTEXT_EVENTBUS_VERSION__",
|
||||
"com.cneicy.shrink-mod-framework": "__MOD_VERSION__",
|
||||
"com.cneicy.shrink-tutorial": "__TUTORIAL_VERSION__",
|
||||
"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#7c0f199fe0d3fc528024488ccd671e6c7b27745b",
|
||||
"com.unity.nuget.newtonsoft-json": "3.2.2"
|
||||
}
|
||||
}'
|
||||
registry_manifest="${registry_manifest//__STARTER_VERSION__/$SHRINKSDK_PUBLISHED_STARTER_VERSION}"
|
||||
registry_manifest="${registry_manifest//__CONTEXT_EVENTBUS_VERSION__/$SHRINKSDK_PUBLISHED_CONTEXT_EVENTBUS_VERSION}"
|
||||
registry_manifest="${registry_manifest//__MOD_VERSION__/$SHRINKSDK_PUBLISHED_MOD_VERSION}"
|
||||
registry_manifest="${registry_manifest//__TUTORIAL_VERSION__/$SHRINKSDK_PUBLISHED_TUTORIAL_VERSION}"
|
||||
write_manifest "$registry_project" "$registry_manifest"
|
||||
run_unity "$registry_project" PublishedUpmConsumerValidator.VerifyRegistry "$registry_project/registry.log" false
|
||||
|
||||
git_project="$(prepare_consumer git-tag)"
|
||||
write_manifest "$git_project" '{
|
||||
git_manifest='{
|
||||
"scopedRegistries": [
|
||||
{
|
||||
"name": "ShrinkSDK",
|
||||
@@ -290,15 +344,18 @@ write_manifest "$git_project" '{
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"com.cneicy.shrink-mod-framework": "https://git.crash.work/ShrinkSDK/ShrinkModFramework.git#v0.2.4",
|
||||
"com.cneicy.shrink-mod-framework": "__MOD_REPOSITORY__#v__MOD_VERSION__",
|
||||
"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#7c0f199fe0d3fc528024488ccd671e6c7b27745b",
|
||||
"com.unity.nuget.newtonsoft-json": "3.2.2"
|
||||
}
|
||||
}'
|
||||
git_manifest="${git_manifest//__MOD_REPOSITORY__/$SHRINKSDK_PUBLISHED_MOD_REPOSITORY}"
|
||||
git_manifest="${git_manifest//__MOD_VERSION__/$SHRINKSDK_PUBLISHED_MOD_VERSION}"
|
||||
write_manifest "$git_project" "$git_manifest"
|
||||
run_unity "$git_project" PublishedUpmConsumerValidator.VerifyGitTag "$git_project/git-tag.log" false
|
||||
|
||||
installer_project="$(prepare_consumer installer)"
|
||||
write_manifest "$installer_project" '{
|
||||
installer_manifest='{
|
||||
"scopedRegistries": [
|
||||
{
|
||||
"name": "Existing Registry",
|
||||
@@ -307,11 +364,14 @@ write_manifest "$installer_project" '{
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"com.cneicy.shrink-installer": "https://git.crash.work/ShrinkSDK/Installer.git#v0.2.4",
|
||||
"com.cneicy.shrink-installer": "__INSTALLER_REPOSITORY__#v__INSTALLER_VERSION__",
|
||||
"com.unity.nuget.newtonsoft-json": "3.2.2",
|
||||
"com.unity.test-framework": "1.1.33"
|
||||
}
|
||||
}'
|
||||
installer_manifest="${installer_manifest//__INSTALLER_REPOSITORY__/$SHRINKSDK_PUBLISHED_INSTALLER_REPOSITORY}"
|
||||
installer_manifest="${installer_manifest//__INSTALLER_VERSION__/$SHRINKSDK_PUBLISHED_INSTALLER_VERSION}"
|
||||
write_manifest "$installer_project" "$installer_manifest"
|
||||
run_unity "$installer_project" PublishedUpmConsumerValidator.ApplyInstaller "$installer_project/installer-apply.log" false
|
||||
run_unity "$installer_project" PublishedUpmConsumerValidator.VerifyInstallerResult "$installer_project/installer-result.log" false
|
||||
|
||||
|
||||
Reference in New Issue
Block a user