diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 95ffa08cc..2df8239b6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -137,9 +137,18 @@ jobs: - - + + + + + + + + + + + EOF diff --git a/smoketests/tests/csharp_module.py b/smoketests/tests/csharp_module.py index 6eda4e2ce..6207994a4 100644 --- a/smoketests/tests/csharp_module.py +++ b/smoketests/tests/csharp_module.py @@ -4,6 +4,7 @@ import tempfile from pathlib import Path import shutil import subprocess +import xml.etree.ElementTree as xml @requires_dotnet @@ -26,20 +27,28 @@ class CreateProject(unittest.TestCase): packed_projects = ["BSATN.Runtime", "Runtime"] - config = [] - config.append("") - config.append("") - config.append("") - config.append("") - for project in packed_projects: - path = bindings / project / "bin" / "Release" - config.append("\n" % (project, str(path))) - config.append("") - config.append("") - config.append("") - config.append("") + config = xml.Element("configuration") - config = "\n".join(config) + sources = xml.SubElement(config, "packageSources") + mappings = xml.SubElement(config, "packageSourceMapping") + + for project in packed_projects: + # Add local build directories as NuGet repositories. + path = bindings / project / "bin" / "Release" + project = f"SpacetimeDB.{project}" + xml.SubElement(sources, "add", key=project, value=str(path)) + + # Add strict package source mappings to ensure that + # SpacetimeDB.* packages are used from those directories + # and never from nuget.org. + # + # This prevents bugs where we silently used an outdated + # version which led to tests passing when they shouldn't. + mapping = xml.SubElement(mappings, "packageSource", key=project) + xml.SubElement(mapping, "package", pattern=project) + + xml.indent(config) + config = xml.tostring(config, encoding="unicode", xml_declaration=True) print("Writing `nuget.config` contents:") print(config)