From 0a20861b6ac59c59aebc2e74e9626d373790f303 Mon Sep 17 00:00:00 2001 From: Nick Gerace Date: Mon, 8 Jul 2024 17:53:04 -0400 Subject: [PATCH] Remove remaining old test builtins This commit removes the remaining old test builtins. With this change, we no longer need our "prelude-si" targets to track "pkgs" or "pkgs_path". As a result of these changes, two "fake" builtins were added to replace the old pkgs. Ideally, these builtins would not resemble real world resources in order to reduce confusion, but given the complexity of fixing tests in place with as little interference as possible, this commit opts to keep the existing structures of each asset in place. Signed-off-by: Nick Gerace --- bin/module-index/BUCK | 1 - .../src/test_exclusive_schemas/fake_butane.rs | 230 ++++++++++++++++++ .../fake_docker_image.rs | 120 +++++++++ .../src/test_exclusive_schemas/mod.rs | 59 ++++- .../src/test_exclusive_schemas/swifty.rs | 43 +++- lib/dal/src/builtins.rs | 41 +--- lib/dal/tests/integration_test/builtins.rs | 79 ------ lib/dal/tests/integration_test/diagram.rs | 4 +- lib/dal/tests/integration_test/mod.rs | 1 - lib/dal/tests/integration_test/module.rs | 4 +- lib/dal/tests/integration_test/rebaser.rs | 16 +- .../tests/integration_test/schema/variant.rs | 1 + .../integration_test/schema/variant/view.rs | 3 +- pkgs/TODO.md | 7 + pkgs/si-coreos-2023-09-13.sipkg | Bin 89600 -> 0 bytes pkgs/si-docker-image-2023-09-13.sipkg | Bin 62464 -> 0 bytes 16 files changed, 477 insertions(+), 132 deletions(-) create mode 100644 lib/dal-test/src/test_exclusive_schemas/fake_butane.rs create mode 100644 lib/dal-test/src/test_exclusive_schemas/fake_docker_image.rs delete mode 100644 lib/dal/tests/integration_test/builtins.rs create mode 100644 pkgs/TODO.md delete mode 100644 pkgs/si-coreos-2023-09-13.sipkg delete mode 100644 pkgs/si-docker-image-2023-09-13.sipkg diff --git a/bin/module-index/BUCK b/bin/module-index/BUCK index ae2fc829d9..3f25618d7e 100644 --- a/bin/module-index/BUCK +++ b/bin/module-index/BUCK @@ -21,7 +21,6 @@ rust_binary( "dev.jwt_signing_public_key.pem": "//config/keys:dev.jwt_signing_public_key.pem", "prod.jwt_signing_public_key.pem": "//config/keys:prod.jwt_signing_public_key.pem", "dev.postgres.root.crt": "//config/keys:dev.postgres.root.crt", -# "pkgs_path": "//pkgs:pkgs", }, ) diff --git a/lib/dal-test/src/test_exclusive_schemas/fake_butane.rs b/lib/dal-test/src/test_exclusive_schemas/fake_butane.rs new file mode 100644 index 0000000000..e3eae73937 --- /dev/null +++ b/lib/dal-test/src/test_exclusive_schemas/fake_butane.rs @@ -0,0 +1,230 @@ +use dal::func::argument::FuncArgumentKind; +use dal::pkg::import_pkg_from_pkg; +use dal::{BuiltinsResult, DalContext}; +use dal::{ComponentType, PropKind}; +use si_pkg::{ + AttrFuncInputSpec, AttrFuncInputSpecKind, FuncArgumentSpec, FuncSpec, FuncSpecBackendKind, + FuncSpecBackendResponseType, FuncSpecData, PkgSpec, PropSpec, PropSpecWidgetKind, SchemaSpec, + SchemaVariantSpec, SchemaVariantSpecData, SiPkg, SocketSpecArity, +}; +use si_pkg::{SchemaSpecData, SocketSpec, SocketSpecData, SocketSpecKind}; + +use crate::test_exclusive_schemas::{ + build_asset_func, create_identity_func, PKG_CREATED_BY, PKG_VERSION, +}; + +pub(crate) async fn migrate_test_exclusive_schema_fake_butane( + ctx: &DalContext, +) -> BuiltinsResult<()> { + let mut builder = PkgSpec::builder(); + + let schema_name = "Butane"; + + builder + .name(schema_name) + .version(PKG_VERSION) + .created_by(PKG_CREATED_BY); + + let identity_func_spec = create_identity_func()?; + + let fn_name = "test:scaffoldFakeButane"; + let authoring_schema_func = build_asset_func(fn_name)?; + + let code = "async function main(input: Input): Promise < Output > { + if (input.images === undefined || input.images === null) return []; + let images = Array.isArray(input.images) ? input.images : [input.images]; + + let units: any[] = []; + + images + .filter((i: any) => i ?? false) + .forEach(function(dockerImage: any) { + let name = dockerImage.si.name + .replace(/[^A-Za-z0-9]/g, '-') + .replace(/-+$/, '') + .toLowerCase(); + let unit: Record < string, any > = { + name: name + '.service', + enabled: true, + }; + + let ports = ''; + let dockerImageExposedPorts = dockerImage.domain.ExposedPorts; + if ( + !( + dockerImageExposedPorts === undefined || + dockerImageExposedPorts === null + ) + ) { + dockerImageExposedPorts.forEach(function(dockerImageExposedPort: any) { + if ( + !( + dockerImageExposedPort === undefined || + dockerImageExposedPort === null + ) + ) { + let parts = dockerImageExposedPort.split('/'); + try { + // Prefix with a blank space. + ports = ports + ` --publish ${parts[0]}:${parts[0]}`; + } catch (err) {} + } + }); + } + + let image = dockerImage.domain.image; + let defaultDockerHost = 'docker.io'; + let imageParts = image.split('/'); + if (imageParts.length === 1) { + image = [defaultDockerHost, 'library', imageParts[0]].join('/'); + } else if (imageParts.length === 2) { + image = [defaultDockerHost, imageParts[0], imageParts[1]].join('/'); + } + + let description = name.charAt(0).toUpperCase() + name.slice(1); + + unit.contents = `[Unit]\nDescription=${description}\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nTimeoutStartSec=0\nExecStartPre=-/bin/podman kill ${name}\nExecStartPre=-/bin/podman rm ${name}\nExecStartPre=/bin/podman pull ${image}\nExecStart=/bin/podman run --name ${name}${ports} ${image}\n\n[Install]\nWantedBy=multi-user.target`; + + units.push(unit); + }); + + return units; + }"; + let fn_name = "test:dockerImagesToButaneUnits"; + let docker_images_to_butane_units_func_spec = FuncSpec::builder() + .name(fn_name) + .unique_id(fn_name) + .data( + FuncSpecData::builder() + .name(fn_name) + .code_plaintext(code) + .handler("main") + .backend_kind(FuncSpecBackendKind::JsAttribute) + .response_type(FuncSpecBackendResponseType::Array) + .build()?, + ) + .argument( + FuncArgumentSpec::builder() + .name("images") + .kind(FuncArgumentKind::Array) + .element_kind(Some(FuncArgumentKind::Object.into())) + .build()?, + ) + .build()?; + + let schema = SchemaSpec::builder() + .name(schema_name) + .data( + SchemaSpecData::builder() + .name(schema_name) + .category("test exclusive") + .category_name(schema_name) + .build()?, + ) + .variant( + SchemaVariantSpec::builder() + .version("v0") + .unique_id("butane_sv") + .data( + SchemaVariantSpecData::builder() + .version("v0") + .color("#ffffff") + .func_unique_id(&authoring_schema_func.unique_id) + .component_type(ComponentType::Component) + .build()?, + ) + .domain_prop( + PropSpec::builder() + .name("version") + .kind(PropKind::String) + .default_value(serde_json::json!("1.4.0")) + .widget_kind(PropSpecWidgetKind::Text) + .build()?, + ) + .domain_prop( + PropSpec::builder() + .name("variant") + .kind(PropKind::String) + .default_value(serde_json::json!("fcos")) + .widget_kind(PropSpecWidgetKind::Text) + .build()?, + ) + .domain_prop( + PropSpec::builder() + .name("systemd") + .kind(PropKind::Object) + .entry( + PropSpec::builder() + .name("units") + .kind(PropKind::Array) + .func_unique_id(&docker_images_to_butane_units_func_spec.unique_id) + .input( + AttrFuncInputSpec::builder() + .kind(AttrFuncInputSpecKind::InputSocket) + .name("images") + .socket_name("Container Image") + .build()?, + ) + .type_prop( + PropSpec::builder() + .name("unit") + .kind(PropKind::Object) + .entry( + PropSpec::builder() + .name("name") + .kind(PropKind::String) + .widget_kind(PropSpecWidgetKind::Text) + .build()?, + ) + .entry( + PropSpec::builder() + .name("enabled") + .kind(PropKind::Boolean) + .widget_kind(PropSpecWidgetKind::Checkbox) + .build()?, + ) + .entry( + PropSpec::builder() + .name("contents") + .kind(PropKind::String) + .widget_kind(PropSpecWidgetKind::TextArea) + .build()?, + ) + .build()?, + ) + .build()?, + ) + .build()?, + ) + .socket( + SocketSpec::builder() + .name("Container Image") + .data( + SocketSpecData::builder() + .name("Container Image") + .kind(SocketSpecKind::Input) + .arity(SocketSpecArity::Many) + .func_unique_id(&identity_func_spec.unique_id) + .connection_annotations(serde_json::to_string(&vec![ + "Container Image", + ])?) + .build()?, + ) + .build()?, + ) + .build()?, + ) + .build()?; + + let spec = builder + .func(identity_func_spec) + .func(authoring_schema_func) + .func(docker_images_to_butane_units_func_spec) + .schema(schema) + .build()?; + + let pkg = SiPkg::load_from_spec(spec)?; + import_pkg_from_pkg(ctx, &pkg, None).await?; + + Ok(()) +} diff --git a/lib/dal-test/src/test_exclusive_schemas/fake_docker_image.rs b/lib/dal-test/src/test_exclusive_schemas/fake_docker_image.rs new file mode 100644 index 0000000000..f2f43485e9 --- /dev/null +++ b/lib/dal-test/src/test_exclusive_schemas/fake_docker_image.rs @@ -0,0 +1,120 @@ +use dal::pkg::import_pkg_from_pkg; +use dal::prop::PropPath; +use dal::ComponentType; +use dal::{BuiltinsResult, DalContext}; +use si_pkg::{ + AttrFuncInputSpec, AttrFuncInputSpecKind, PkgSpec, PropSpec, PropSpecKind, PropSpecWidgetKind, + SchemaSpec, SchemaVariantSpec, SchemaVariantSpecData, SiPkg, SocketSpecArity, SocketSpecData, + SocketSpecKind, +}; +use si_pkg::{SchemaSpecData, SocketSpec}; + +use crate::test_exclusive_schemas::{ + build_asset_func, create_identity_func, PKG_CREATED_BY, PKG_VERSION, +}; + +pub(crate) async fn migrate_test_exclusive_schema_fake_docker_image( + ctx: &DalContext, +) -> BuiltinsResult<()> { + let mut builder = PkgSpec::builder(); + + let schema_name = "Docker Image"; + + builder + .name(schema_name) + .version(PKG_VERSION) + .created_by(PKG_CREATED_BY); + + let identity_func_spec = create_identity_func()?; + + let fn_name = "test:scaffoldFakeDockerImage"; + let authoring_schema_func = build_asset_func(fn_name)?; + + let schema = SchemaSpec::builder() + .name(schema_name) + .data( + SchemaSpecData::builder() + .name(schema_name) + .category("test exclusive") + .category_name(schema_name) + .build()?, + ) + .variant( + SchemaVariantSpec::builder() + .version("v0") + .unique_id("docker_image_sv") + .data( + SchemaVariantSpecData::builder() + .version("v0") + .color("#ffffff") + .func_unique_id(&authoring_schema_func.unique_id) + .component_type(ComponentType::Component) + .build()?, + ) + .domain_prop( + PropSpec::builder() + .name("image") + .kind(PropSpecKind::String) + .func_unique_id(&identity_func_spec.unique_id) + .widget_kind(PropSpecWidgetKind::Text) + .input( + AttrFuncInputSpec::builder() + .kind(AttrFuncInputSpecKind::Prop) + .name("identity") + .prop_path(PropPath::new(["root", "si", "name"])) + .build()?, + ) + .build()?, + ) + .domain_prop( + PropSpec::builder() + .name("ExposedPorts") + .kind(PropSpecKind::Array) + .widget_kind(PropSpecWidgetKind::Array) + .type_prop( + PropSpec::builder() + .name("ExposedPort") + .kind(PropSpecKind::String) + .widget_kind(PropSpecWidgetKind::Text) + .build()?, + ) + .build()?, + ) + .socket( + SocketSpec::builder() + .name("Container Image") + .data( + SocketSpecData::builder() + .name("Container Image") + .kind(SocketSpecKind::Output) + .arity(SocketSpecArity::Many) + .func_unique_id(&identity_func_spec.unique_id) + .connection_annotations(serde_json::to_string(&vec![ + "Container Image", + ])?) + .build()?, + ) + .input( + AttrFuncInputSpec::builder() + .kind(AttrFuncInputSpecKind::Prop) + .name("identity") + .prop_path(PropPath::new(["root"])) + .build()?, + ) + .build()?, + ) + .build()?, + ) + .build()?; + + let spec = builder + .func(identity_func_spec) + .func(authoring_schema_func) + .schema(schema) + .build()?; + + let pkg = SiPkg::load_from_spec(spec)?; + import_pkg_from_pkg(ctx, &pkg, None).await?; + + Ok(()) +} diff --git a/lib/dal-test/src/test_exclusive_schemas/mod.rs b/lib/dal-test/src/test_exclusive_schemas/mod.rs index 54dd777df4..c34a93f749 100644 --- a/lib/dal-test/src/test_exclusive_schemas/mod.rs +++ b/lib/dal-test/src/test_exclusive_schemas/mod.rs @@ -1,13 +1,20 @@ +use base64::engine::general_purpose; +use base64::Engine; use category_pirate::migrate_test_exclusive_schema_pet_shop; use category_pirate::migrate_test_exclusive_schema_pirate; use category_validated::migrate_test_exclusive_schema_bad_validations; use category_validated::migrate_test_exclusive_schema_validated_input; use category_validated::migrate_test_exclusive_schema_validated_output; -use dal::builtins::schema; +use dal::func::argument::FuncArgument; use dal::func::argument::FuncArgumentKind; use dal::func::intrinsics::IntrinsicFunc; -use dal::{BuiltinsError, BuiltinsResult, DalContext}; +use dal::Func; +use dal::FuncBackendKind; +use dal::FuncBackendResponseType; +use dal::{BuiltinsResult, DalContext}; use dummy_secret::migrate_test_exclusive_schema_dummy_secret; +use fake_butane::migrate_test_exclusive_schema_fake_butane; +use fake_docker_image::migrate_test_exclusive_schema_fake_docker_image; use fallout::migrate_test_exclusive_schema_fallout; use katy_perry::migrate_test_exclusive_schema_katy_perry; use legos::migrate_test_exclusive_schema_large_even_lego; @@ -27,6 +34,8 @@ use swifty::migrate_test_exclusive_schema_swifty; mod category_pirate; mod category_validated; mod dummy_secret; +mod fake_butane; +mod fake_docker_image; mod fallout; mod katy_perry; mod legos; @@ -35,12 +44,9 @@ mod swifty; const PKG_VERSION: &str = "2019-06-03"; const PKG_CREATED_BY: &str = "System Initiative"; -const SI_DOCKER_IMAGE_PKG: &str = "si-docker-image-2023-09-13.sipkg"; -const SI_COREOS_PKG: &str = "si-coreos-2023-09-13.sipkg"; pub(crate) async fn migrate(ctx: &DalContext) -> BuiltinsResult<()> { - schema::migrate_pkg(ctx, SI_DOCKER_IMAGE_PKG, None).await?; - schema::migrate_pkg(ctx, SI_COREOS_PKG, None).await?; + migrate_test_exclusive_func_si_resource_payload_to_value(ctx).await?; migrate_test_exclusive_schema_starfield(ctx).await?; migrate_test_exclusive_schema_etoiles(ctx).await?; migrate_test_exclusive_schema_morningstar(ctx).await?; @@ -59,6 +65,45 @@ pub(crate) async fn migrate(ctx: &DalContext) -> BuiltinsResult<()> { migrate_test_exclusive_schema_medium_odd_lego(ctx).await?; migrate_test_exclusive_schema_small_odd_lego(ctx).await?; migrate_test_exclusive_schema_small_even_lego(ctx).await?; + migrate_test_exclusive_schema_fake_docker_image(ctx).await?; + migrate_test_exclusive_schema_fake_butane(ctx).await?; + Ok(()) +} + +// TODO(nick): remove this if "si:resourcePayloadToValue" becomes an instrinsic func. +async fn migrate_test_exclusive_func_si_resource_payload_to_value( + ctx: &DalContext, +) -> BuiltinsResult<()> { + let func_name = "si:resourcePayloadToValue"; + + let func_id = match Func::find_id_by_name(ctx, func_name).await? { + Some(existing_func_id) => existing_func_id, + None => { + let new_func = Func::new( + ctx, + func_name, + None::, + None::, + None::, + false, + true, + FuncBackendKind::JsAttribute, + FuncBackendResponseType::Json, + Some("main"), + Some(general_purpose::STANDARD_NO_PAD.encode("async function main(arg: Input): Promise { return arg.payload ?? {}; }")), + ) + .await?; + new_func.id + } + }; + + if FuncArgument::find_by_name_for_func(ctx, "payload", func_id) + .await? + .is_none() + { + FuncArgument::new(ctx, "payload", FuncArgumentKind::Object, None, func_id).await?; + } + Ok(()) } @@ -94,7 +139,7 @@ fn build_resource_payload_to_value_func() -> BuiltinsResult { Ok(resource_payload_to_value_func) } -fn build_action_func(code: &str, fn_name: &str) -> Result { +fn build_action_func(code: &str, fn_name: &str) -> BuiltinsResult { let func = FuncSpec::builder() .name(fn_name) .unique_id(fn_name) diff --git a/lib/dal-test/src/test_exclusive_schemas/swifty.rs b/lib/dal-test/src/test_exclusive_schemas/swifty.rs index be32481095..5175d137c1 100644 --- a/lib/dal-test/src/test_exclusive_schemas/swifty.rs +++ b/lib/dal-test/src/test_exclusive_schemas/swifty.rs @@ -3,9 +3,10 @@ use dal::pkg::import_pkg_from_pkg; use dal::{prop::PropPath, ComponentType}; use dal::{BuiltinsResult, DalContext, PropKind}; use si_pkg::{ - ActionFuncSpec, AttrFuncInputSpec, AttrFuncInputSpecKind, LeafInputLocation, LeafKind, PkgSpec, - PropSpec, SchemaSpec, SchemaVariantSpec, SchemaVariantSpecData, SiPkg, SocketSpec, - SocketSpecData, SocketSpecKind, + ActionFuncSpec, AttrFuncInputSpec, AttrFuncInputSpecKind, FuncSpec, FuncSpecBackendKind, + FuncSpecBackendResponseType, FuncSpecData, LeafInputLocation, LeafKind, PkgSpec, PropSpec, + SchemaSpec, SchemaVariantSpec, SchemaVariantSpecData, SiPkg, SocketSpec, SocketSpecData, + SocketSpecKind, }; use si_pkg::{LeafFunctionSpec, SchemaSpecData}; @@ -74,6 +75,9 @@ pub(crate) async fn migrate_test_exclusive_schema_swifty(ctx: &DalContext) -> Bu }"; let code_gen_func = build_codegen_func(codegen_func_code, codegen_fn_name)?; + // Assemble Qualification Func + let (qualification_func_spec, qualfiication_leaf_func_spec) = assemble_qualification()?; + let swifty_schema = SchemaSpec::builder() .name(schema_name) .data( @@ -164,6 +168,7 @@ pub(crate) async fn migrate_test_exclusive_schema_swifty(ctx: &DalContext) -> Bu .inputs(vec![LeafInputLocation::Domain]) .build()?, ) + .leaf_function(qualfiication_leaf_func_spec) .build()?, ) .build()?; @@ -177,6 +182,7 @@ pub(crate) async fn migrate_test_exclusive_schema_swifty(ctx: &DalContext) -> Bu .func(swifty_authoring_schema_func) .func(resource_payload_to_value_func) .func(code_gen_func) + .func(qualification_func_spec) .schema(swifty_schema) .build()?; @@ -185,3 +191,34 @@ pub(crate) async fn migrate_test_exclusive_schema_swifty(ctx: &DalContext) -> Bu Ok(()) } + +fn assemble_qualification() -> BuiltinsResult<(FuncSpec, LeafFunctionSpec)> { + let fn_code = "async function qualification(_component: Input): Promise {\ + return { + result: 'success', + message: 'this cannot fail' + }; + }"; + let fn_name = "test:swiftyQualification"; + let func_spec = FuncSpec::builder() + .name(fn_name) + .unique_id(fn_name) + .data( + FuncSpecData::builder() + .name(fn_name) + .code_plaintext(fn_code) + .handler("qualification") + .backend_kind(FuncSpecBackendKind::JsAttribute) + .response_type(FuncSpecBackendResponseType::Qualification) + .build()?, + ) + .build()?; + + let leaf_function_spec = LeafFunctionSpec::builder() + .func_unique_id(&func_spec.unique_id) + .leaf_kind(LeafKind::Qualification) + .inputs(vec![LeafInputLocation::Domain]) + .build()?; + + Ok((func_spec, leaf_function_spec)) +} diff --git a/lib/dal/src/builtins.rs b/lib/dal/src/builtins.rs index d1d321a535..eafd535db2 100644 --- a/lib/dal/src/builtins.rs +++ b/lib/dal/src/builtins.rs @@ -3,12 +3,12 @@ //! [migrate()](crate::builtins::migrate_local()) function. However, they may have some functionality //! exposed for "dev mode" use cases. -use std::collections::HashSet; use telemetry::prelude::*; use thiserror::Error; use si_pkg::{SiPkgError, SpecError}; +use crate::func::argument::FuncArgumentError; use crate::func::FuncError; use crate::module::ModuleError; use crate::pkg::PkgError; @@ -17,7 +17,6 @@ use crate::{ SchemaVariantId, StandardModelError, TransactionsError, }; -// Private builtins modules. pub mod func; pub mod schema; @@ -30,39 +29,41 @@ pub enum BuiltinsError { AttributeValueNotFound(AttributeValueId), #[error("builtin {0} missing func argument {1}")] BuiltinMissingFuncArgument(String, String), - #[error("Filesystem IO error: {0}")] - FilesystemIO(#[from] std::io::Error), - #[error(transparent)] + #[error("func error")] Func(#[from] FuncError), + #[error("func argument error: {0}")] + FuncArgument(#[from] FuncArgumentError), #[error("json error {1} at file {0}")] FuncJson(String, serde_json::Error), - #[error("Func Metadata error: {0}")] + #[error("func metadata error: {0}")] FuncMetadata(String), #[error("func not found in migration cache {0}")] FuncNotFoundInMigrationCache(&'static str), + #[error("io error: {0}")] + Io(#[from] std::io::Error), #[error("missing attribute prototype for attribute value")] MissingAttributePrototypeForAttributeValue, #[error("no packages path configured")] MissingPkgsPath, - #[error(transparent)] + #[error("module error: {0}")] Module(#[from] ModuleError), - #[error(transparent)] + #[error("pkg error: {0}")] Pkg(#[from] PkgError), #[error("prop cache not found: {0}")] PropCacheNotFound(SchemaVariantId), #[error("prop not bound by id: {0}")] PropNotFound(PropId), - #[error("Regex parsing error: {0}")] + #[error("regex parsing error: {0}")] Regex(#[from] regex::Error), - #[error(transparent)] + #[error("schema variant error: {0}")] SchemaVariant(#[from] SchemaVariantError), #[error("serde json error: {0}")] SerdeJson(#[from] serde_json::Error), #[error("encountered serde json error for func ({0}): {1}")] SerdeJsonErrorForFunc(String, serde_json::Error), - #[error(transparent)] + #[error("si pkg error: {0}")] SiPkg(#[from] SiPkgError), - #[error(transparent)] + #[error("spec error: {0}")] Spec(#[from] SpecError), #[error("standard model error: {0}")] StandardModel(#[from] StandardModelError), @@ -71,19 +72,3 @@ pub enum BuiltinsError { } pub type BuiltinsResult = Result; - -/// This enum drives what builtin [`Schemas`](crate::Schema) to migrate for tests. -/// -/// This enum _should not_ be used outside of tests! -#[remain::sorted] -#[derive(Debug, Clone, Eq, PartialEq)] -pub enum SelectedTestBuiltinSchemas { - /// Migrate everything (default behavior). - All, - /// Migrate nothing. - None, - /// Migrate _some_ [`Schema(s)`](crate::Schema) based on user input. - Some(HashSet), - /// Migrate _only_ test-exclusive [`Schemas`](crate::Schema). - Test, -} diff --git a/lib/dal/tests/integration_test/builtins.rs b/lib/dal/tests/integration_test/builtins.rs deleted file mode 100644 index 711595888c..0000000000 --- a/lib/dal/tests/integration_test/builtins.rs +++ /dev/null @@ -1,79 +0,0 @@ -use dal::workspace_snapshot::edge_weight::EdgeWeightKindDiscriminants; -use dal::{func::intrinsics::IntrinsicFunc, DalContext, Func, Schema, SchemaVariant}; -use dal_test::test; -use strum::IntoEnumIterator; - -#[test] -async fn docker_image_has_one_qualfiication_map_prop(ctx: &DalContext) { - let docker_image = Schema::list(ctx) - .await - .expect("list schemas") - .iter() - .find(|schema| schema.name() == "Docker Image") - .expect("docker image does not exist") - .to_owned(); - - let variant = SchemaVariant::list_for_schema(ctx, docker_image.id()) - .await - .expect("get schema variants") - .pop() - .expect("get default variant"); - - let root_prop_id = SchemaVariant::get_root_prop_id(ctx, variant.id()) - .await - .expect("get root prop for variant"); - - let workspace_snapshot = ctx.workspace_snapshot().expect("get snap"); - - let child_prop_targets = workspace_snapshot - .outgoing_targets_for_edge_weight_kind(root_prop_id, EdgeWeightKindDiscriminants::Use) - .await - .expect("get all child prop targets of root"); - - let mut qualification_props = vec![]; - - for node_index in child_prop_targets { - let node_weight = workspace_snapshot - .get_node_weight(node_index) - .await - .expect("get node weight") - .get_prop_node_weight() - .expect("should be prop") - .to_owned(); - - if node_weight.name() == "qualification" { - qualification_props.push(node_index) - } - } - - assert_eq!(1, qualification_props.len()); -} - -#[test] -async fn builtin_funcs_and_schemas_are_not_empty(ctx: &DalContext) { - let funcs: Vec = Func::list_all(ctx) - .await - .expect("list funcs should work") - .iter() - .map(|f| f.name.to_owned()) - .collect(); - - // Check that the funcs at least contain all intrinsics. - let intrinsics: Vec = IntrinsicFunc::iter() - .map(|intrinsic| intrinsic.name().to_owned()) - .collect(); - for intrinsic in intrinsics { - assert!(funcs.contains(&intrinsic)); - } - - // Ensure that we have at least one schema variant for every schema and that we have at least - // one schema. - let schemas: Vec = Schema::list(ctx).await.expect("could not list schemas"); - assert!(!schemas.is_empty()); - for schema in schemas { - let schema_variants: Vec = SchemaVariant::list_for_schema(ctx, schema.id()) - .await - .expect("could not list schema variants"); - assert!(!schema_variants.is_empty()); - } -} diff --git a/lib/dal/tests/integration_test/diagram.rs b/lib/dal/tests/integration_test/diagram.rs index ef82df31ef..c8221b5636 100644 --- a/lib/dal/tests/integration_test/diagram.rs +++ b/lib/dal/tests/integration_test/diagram.rs @@ -7,11 +7,11 @@ use dal_test::{ #[test] async fn components_removed_from_snapshot_have_virtual_diagram_entries(ctx: &mut DalContext) { let component_to_remove = - create_component_for_default_schema_name(ctx, "Docker Image", "Removed in sub-change set") + create_component_for_default_schema_name(ctx, "starfield", "Removed in sub-change set") .await .expect("Unable to create component."); let _component_still_in_change_set = - create_component_for_default_schema_name(ctx, "Docker Image", "Still here") + create_component_for_default_schema_name(ctx, "starfield", "Still here") .await .expect("Unable to create component."); ChangeSetTestHelpers::commit_and_update_snapshot_to_visibility(ctx) diff --git a/lib/dal/tests/integration_test/mod.rs b/lib/dal/tests/integration_test/mod.rs index 674859adf2..745091c305 100644 --- a/lib/dal/tests/integration_test/mod.rs +++ b/lib/dal/tests/integration_test/mod.rs @@ -1,7 +1,6 @@ mod action; mod asset; mod attribute; -mod builtins; mod change_set; mod component; mod connection; diff --git a/lib/dal/tests/integration_test/module.rs b/lib/dal/tests/integration_test/module.rs index c4dca3d6e9..d2b3f0300c 100644 --- a/lib/dal/tests/integration_test/module.rs +++ b/lib/dal/tests/integration_test/module.rs @@ -19,6 +19,8 @@ async fn list_modules(ctx: &DalContext) { let expected_installed_module_names = vec![ "BadValidations".to_string(), + "Butane".to_string(), + "Docker Image".to_string(), "ValidatedInput".to_string(), "ValidatedOutput".to_string(), "dummy-secret".to_string(), @@ -32,8 +34,6 @@ async fn list_modules(ctx: &DalContext) { "morningstar".to_string(), "pet_shop".to_string(), "pirate".to_string(), - "si-coreos-2023-09-13".to_string(), - "si-docker-image-2023-09-13".to_string(), "si-intrinsic-funcs".to_string(), "small even lego".to_string(), "small odd lego".to_string(), diff --git a/lib/dal/tests/integration_test/rebaser.rs b/lib/dal/tests/integration_test/rebaser.rs index 39cff6344e..ab9eafe9be 100644 --- a/lib/dal/tests/integration_test/rebaser.rs +++ b/lib/dal/tests/integration_test/rebaser.rs @@ -371,7 +371,7 @@ async fn delete_func_node(ctx: &mut DalContext) { #[test] async fn correctly_detect_unrelated_unmodified_data(ctx: &mut DalContext) { let shared_component_id = - create_component_for_default_schema_name(ctx, "Docker Image", "Shared component") + create_component_for_default_schema_name(ctx, "swifty", "Shared component") .await .expect("could not create component") .id(); @@ -423,7 +423,7 @@ async fn correctly_detect_unrelated_unmodified_data(ctx: &mut DalContext) { .await .expect("Unable to switch to change set B"); let _change_set_b_component_id = - create_component_for_default_schema_name(ctx, "Docker Image", "Change Set B Component") + create_component_for_default_schema_name(ctx, "swifty", "Change Set B Component") .await .expect("could not creat component") .id(); @@ -450,10 +450,10 @@ async fn correctly_detect_unrelated_unmodified_data(ctx: &mut DalContext) { .expect("Unable to get attribute values for si.name"); assert_eq!(av_ids.len(), 1, "Found more than one AV for si.name"); let av_ids = shared_component - .attribute_values_for_prop(ctx, &["root", "domain", "image"]) + .attribute_values_for_prop(ctx, &["root", "domain", "name"]) .await - .expect("Unable to get attribute values for domain.image"); - assert_eq!(av_ids.len(), 1, "Found more than one AV for domain.image"); + .expect("Unable to get attribute values for domain.name"); + assert_eq!(av_ids.len(), 1, "Found more than one AV for domain.name"); let av_ids = shared_component .attribute_values_for_prop(ctx, &["root", "qualification", "qualificationItem"]) .await @@ -482,10 +482,10 @@ async fn correctly_detect_unrelated_unmodified_data(ctx: &mut DalContext) { .expect("Unable to get attribute values for si.name"); assert_eq!(av_ids.len(), 1, "Found more than one AV for si.name"); let av_ids = shared_component - .attribute_values_for_prop(ctx, &["root", "domain", "image"]) + .attribute_values_for_prop(ctx, &["root", "domain", "name"]) .await - .expect("Unable to get attribute values for domain.image"); - assert_eq!(av_ids.len(), 1, "Found more than one AV for domain.image"); + .expect("Unable to get attribute values for domain.name"); + assert_eq!(av_ids.len(), 1, "Found more than one AV for domain.name"); let av_ids = shared_component .attribute_values_for_prop(ctx, &["root", "qualification", "qualificationItem"]) .await diff --git a/lib/dal/tests/integration_test/schema/variant.rs b/lib/dal/tests/integration_test/schema/variant.rs index c931993db5..11e266b36a 100644 --- a/lib/dal/tests/integration_test/schema/variant.rs +++ b/lib/dal/tests/integration_test/schema/variant.rs @@ -206,6 +206,7 @@ async fn all_funcs(ctx: &DalContext) { "test:deleteActionSwifty", "test:generateCode", "test:refreshActionSwifty", + "test:swiftyQualification", "test:updateActionSwifty", ], all_funcs.as_slice(), diff --git a/lib/dal/tests/integration_test/schema/variant/view.rs b/lib/dal/tests/integration_test/schema/variant/view.rs index cae5bc56c2..48e8a0d1a1 100644 --- a/lib/dal/tests/integration_test/schema/variant/view.rs +++ b/lib/dal/tests/integration_test/schema/variant/view.rs @@ -43,7 +43,7 @@ async fn get_schema_variant(ctx: &DalContext) { .await .expect("Unable to get all schema variant funcs"); - assert_eq!(6, sv_funcs.len()); + assert_eq!(7, sv_funcs.len()); let mut func_names: Vec = sv_funcs.iter().map(|f| f.name.clone()).collect(); func_names.sort(); @@ -53,6 +53,7 @@ async fn get_schema_variant(ctx: &DalContext) { "test:deleteActionSwifty".to_string(), "test:generateCode".to_string(), "test:refreshActionSwifty".to_string(), + "test:swiftyQualification".to_string(), "test:updateActionSwifty".to_string(), ]; assert_eq!(expected, func_names); diff --git a/pkgs/TODO.md b/pkgs/TODO.md new file mode 100644 index 0000000000..7458939a25 --- /dev/null +++ b/pkgs/TODO.md @@ -0,0 +1,7 @@ +# TODO + +This directory, "pkgs", is no longer used. +There are references to it in [prelude-si](../prelude-si) targets that should be removed. + +This directory still exists because the original PR(s) removing the packages were limited in scope and were refactoring work on the side. +I AM BUT ONE MAN! diff --git a/pkgs/si-coreos-2023-09-13.sipkg b/pkgs/si-coreos-2023-09-13.sipkg deleted file mode 100644 index aa61554a377d95cbfc79c6f4d8eb4f41e29d7d5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89600 zcmeHwTT|Q0w(ff7{0VBG$5V5rFKS&<<*EY)8$%#qz{Y-|THP(<;0p`eB<9!euO-X) zMq*opWX_0MYsQwPmek$j{*5vE;TNNZgAXnjo*()FcOBPwRG5GTf$uw9C`pY71rI_& zgyVaPP!&2{g`tupa-%R5nvnl&@kb_ql!^bOpYbm~Q{f7CixIcDWHcDc$KBm6uKZVA z@?;(d?SAhgEzq4_Uz^+ec29qF3d2WZc4m$+QW&T^)0MYR^06&@!&`ON?&zKPbjk`+ z4Kd7ZH0r6r&c9-2{*0ICPw3xcN`^j{%9`;qar?@)(o5pl<%#0zy0 z$xsRAN<#h6_{wZETPe*`$`_5y=JuN)RPFqV$`8m;V zzV&{GD^mJrEQHWi()ElW5%B}pCCcDGS{v;%5(R$11XFGxnX*hmxs3acD~01}#kL~W z7y9=W=^yfct06a^(wzRcrhm5}hr`EM=HIq^52Inu1UBD)zxaxj{zKvVB6OTkP|YIZ znSeN+t9(xc(uqPD5>6SBq42$sc+7CFf=Glx#0BR*%_RR_&sjnLx&HqiTVq}Q--*S4 zqVBte!SJ!&Ywh%8*L?H~s^1%$9;n}H|F@%F`@bV|+twdRVMm)tjygja4V{s(2fns- z%M24M!!KN!Z^OMuBh$nEhgg?@{m~nBIy-l5NT1$EQHW$`V0Lt0-FDi&`;SggxEl^1 z1|L6sQ2j^KAN<{F5AR0d-|hZ~a5R)XgX6uZ-TEt1{lQ;P^w#;X^YUEGEf9LNC(dEr zHZBjz;bE~@Zv+?BQrSP<*|Db2ZdQ4?yTlsfVY8~)yKk*=rSzZm!M53}FY-Uv|F@aH zx433q`p@6`uB9mr7=1% zM)+_A*m+AkmyI(#m?YXss+S%dF z@#)1yuK(x$|IN9`KlX|&@;~?g|6`YZ`rxVj&-MT5l>AX2ve197|Nry1N=pA8rGjbc zcr@@-3}vo8J5>i_fpfB5PV2G~^hcVgfFuhaVvZv2Zf-2b9cJ!IVT%YT^OpKg?t{zH(s z3>}yHl=+Tvea~@SpSzLKG7PCSLTKN0wWfiQN)ZMeP((u4iwqzGzD&p4eGY^ZmQsB@6xM_W$p;nwvjQO8=7i zzSKbb8^X0KJwW?qWVpuyU;-sjet|C|8R)=*eGNA*bv)m9MdWK6EXoE7|DU)2lUKn2uzNa=9l;`IbjAK?1P?Fxj4 z9f$N#$ER8;?s=Mq0E-wRROCfS5c4wme;8fDf4PipB~mt@)SUmX#s62>fAjvItO~?# zEJZe7zx;|!Gmz4MR*|yJL!|!SJpXf>*?XI7veE@4- z%m0<~AMnm-w*CVZi^-me_2(AaUD+~&Ng)VYsMti%%f7ld!<|9=&uyG0h5?Gm6O-+p zdEBkoYi2UC;!LrQ85%uJ_S$?U^DDNPft3D@^fmJ%1Xf+d}QwUz8wyB-I5{`e#m_|FPjxZgu*)`v0u|7plPHqZ}s+ zfQa3{OS#`KIo6Cd*um-H5i6b^6i>wI(O&8MY2l)<7Y{#46@UMn@Y3ON$vgM?*@;&= zCwm9y6VGr~8Tm?1cvjb2?it={=jRvM8A$m*F+v-LIv;_@w2Fl96UHLXCl(kCgD|2Y zbNo=E@|Pu>PJG+V4K-YdA{}ark^MLAN7B7{coE&-SnDu`Tr07zgZQC z*#Das5ZZM8vYwyPfA0UyI+Op*>od@Qj{o~-F8SP3r}UrW|K_IUkNJ{?{#W>a{+N0D zx4dXd|Jnfm2cItL{%HqwzY)|C_-;5{KR$6#88iSckeR@i1}DN0!we04IDwTQOo!Xd z$3*7`{%_g;OA!-#m%rTqyO#fV*8k%cl3kOQ{}_x1L(|>3{Kv0{0J=w)&e_%8DGBze zb9xiFKNkX+)yB>pJ@3L1{-~Rz{6Dw<{-|Z2zHAo#FUS8(r|}>AA*KJ^{`C1Bh(L5z}&+B*m~^$ljeL) zT20v^@ads<5B9rfwVPV$cyEuC`B8(4`X5#RKBfO$|9=l^`~B{*F8!~F|K{QY(G=}kL$Th_%A2Nf4$4*T9^L6tN$lGWPhmtdxig@e>;DZ z-^&1~m*`>bkh^8Sd59A5=Qlq$2$WUPe&gB=Dg7&hygq>L0rf}eMHF|9hz`;GQANt} z2#UODEjd_#K=U_E(IL(us0f1$0VE7jMz>1VPwjsPy`Iz0_!pn43)Jbm?EnAd@!z%L zzbo|r`TYN^0D|2#iX0bg%<7H;l_Wlic(km-ZFj;Y|AmdMQ~J-!mbM|*l;-pN|7~XP zZLV2Y{;#0_-2Q)?CHSSIr1YQL|G#t@e%Z~l(0^|K|FUI!vm2-M&jXiv0YR>p4{#@Z z0TCjBu7sJ7>W@B9pqg?|z}DB)K_n0^fxt)iXBkN88{cHf|0S-or2h-Fm4CB${O&-x z{=b&~KX3mhyC$swqWfKx_4uLrztH{pHTWk^d#&#?e)_51nX?+f|3H9dO8)_f+(G_7 zu`M2n@rVW*Ad;H9p+Zl11}9*oLQfME|ARZg77B5ECVd`-8tpT-O4d*He?ZKa?SGQv zzrV}3-ss15SlH z6MdW5;6{}uF~`~QCT#a-k1Qu@#R ze``$EzwneS^q>3x{`ngsrT@rx132?I1F%0pKi3eQV3FV*GF1ExIQqZ9Fp!>%U92ydjdxjE6p)dp@1eBUUMhb00v=CmDDgTE# z%l<#$kaGHehZ$H`{(sm1N1ei>8T3bw%D_EnnL*+R%qmnY)(wNb!!-P{w@Br`t@KEY zqtWumRjyVj@<=%Ggl+E}akPcghy#QXL6;!30T2`igy6y#ByuAZg4|{TQ~$rimh1l$ zzSWSMKSnP9SIYmT`v1IO58Xzio*K6My|~c#ZJfae>M!=SDH~Mwm+^1*q+9g!`R~Zw zw)Mx^TEPA>FY%j0a&=riIX-IC_jcO0VZg1z2-DjC$)O|)@X;v@AHf7B$4uNM;8qS7 zPEPsH^zf?NJ47@}?n(W;aZ#()_Sp@+L@DAwy6-?r{|M+4NkV4zeB(P(Qq=dBo+45s z6Br%9&>uwkA%haYkrZH1p`S7xmTj~FE%E4eK=>w8gsO-*-nv9uMQC%2w^BMbhU6IQFP|-*$!%^qm z^`%3g>`S=$PzI6-5(H2H!U)nIA^*rI*SFXJiRvJMWg0Au)Hbt{Qao76R2RT8d`1cq z&HF!ZGpCzgvo8I+g`}BRg85s~%qunpMAH6i2N0p*7@GU3?2T980!QuJ1&H5DZT-M6 zpEvl8Q$63m;QmR_;JGVc)Ajw)`6>NVfr_qB>4gF1JJQO0bcAPt@|11)6N*Sh($m~g z0g;aD+HOG*{~q@h3DFXQOXb3;vcP0OfACQ)>POiL*gW@40)zkV-aJsXmQm}t?De8N*>P4B>os+5~ z_9n(gRtdHnv#B3U*T3%Pl>Ut)m8%fTk5Kv@hQ1RxnxVKK?E8?o!2KG>SAOK%cA!kd zJFlc4atV9EcZ7t}zQtcE^SQe$|GAgj|65Gy#+R&1|KE-Oc@yIRc7L32pVgS$UF;Mb zkD66P?Y{7=ji>2fdqGP7UZ@=|Q1Zist_xg$V9?+b^?tN~PT&awIUl+_(8vuS1ijx- z{ZpY%s1AK717f>ieM#M#QFxcNHe`u|G(-%{Lc|KIP@Kjno%`!?45ZRjuW z;l&9(^a56%Ye4;4 zN2m(C&GS#_A5Mp5`gd~w|29*)@iptpe+2pG^Zyb@AS*nPold)V{}EQb>Ua8&AHBl= zHOvh?g74jje$VuVx5M#+fj3}!V9_TyV;K-ute#)^W&i5PF9iqOJKFiK>mboMTrNC6 zggY9!EcFi3{X znh~33F~+(J>SSjMugym-CQq0Zv$vaqCMKY*_(`)W0=x5)ARaTTaj~2Do^!dfF?s*+ zf|UOY?xOOWhnjAv`c93O;OYu4U_*fVazd1W1PDZFP6E%N4s$}{00zcc00NQ-7XR=@ zD^5uDKklu-f1)PDyZq()-&*<~;y-cvcUtpde>9XmvjfD3Y4sn+A6;O;9?j>=>5 z>>3=NoVcEMhw(GFaq1lGi<<-I^sHQD{t`lC0xiv`uk1o@z03ak&2N&@KXN#L;vi9o z4uGzsJ)pY{cR0$xp!b7M(F_880gZ`#BRu9v4P{U$jxsF)bKxyA+q`B<|10``yNCd9 zGvwyiBNL@Zz<;U)XPi($``4w4aAfyT7vNuu|A5yir~fSL zy6&~F*?%kW-!ZCNKDI_(m~@FA;1}8&UjX(T-gw3fRX~vr=i?uX0p*OMJ(MSWn9Q)|02YT6DAW-}(HL0Tax1V_ zO7p^Hi}VlqpX>iWWx*E)eU1JX{l8AZlK%w#Md9xKIHi2u9z1m9I8pdxaK}JBwjXRJ zi1iBH$)4_*$HYOT&21=(+QvO3zd|Wz%2p4(ZD2bqnRHTKx3)j>4m?z zfTOqp_f1@|45lp5%%SvAU`$|lduVITBW4&3Tje-L5}yO-pn+!cBzKK+B0-kz4a*95 zv&zTa>2xhDz%Txq(!WHSw*hg75(p0sEkF`Yl@r3zt0HuH&|cuW)-Oy1azp}+d36>3 zCnV+C=b7-I&WiePNG^MynaTD4wehkA@n!FONqO4sD6gC;3@7D@`LDYMo9Hs&4JsP8wD+8K1d!li3MsGkG52b&wK6HBmo)gm*8kaLWxm6f>OVox$nl@=!T+|g|AUG6Ka~$}MEV?=Vh=m>WS<;chvbom zEYPwb3gMeVdLnkKFO|nooP>n|sum-Q!3|)^Y7&`1YnP*?p@^jKVQ(`haQ`rppW9Zc z{0G%D*N3U(8tQq-@bF;v!wCmI3f_sfa1L;xi2M5*&@d!}L$K(k_Q}+W)ejD&*KCs{R@W>Pb21!3=hvk z(E<{go=}P+j+!r#%VY>=pg^}*0w18HU=b()V^9fRZ$+%%qkm4fVkw(5gPi`i zr~k|0W4qUSGy0zlw@Ck!!|Tw07#bfn3nk<}Qyc)65K(N0cvee=?D9~k6gwIUtODU1 z+uuka+le6%;1JX|_=D-+7uq2<+Rx!E1?o>QP(0!#P>(_>9pC~L0T&>cRD*`FuEP!5 z#bSO9!heSPn-ktl{U>f?{?orW{trCwHbZWHO-}zC)4y-U{|EuPw-WuLa2<~}PxU@2sF4st|H|~YjQ-0;>M_31cXb#@IwUbDgfbJIgo6Mdw-tb zpHNCF|6wCxYTzMM?#h-KBU%} z)d&67WnFyLHy00|+xr))8w};mS?ByPp!&%E?zGI;eydXc*3rd%nq0dVR7ykr`Q`XS zSTFUOH>a)h%l%~BqDYT<#r9t7)7WoSyTQ1@u3Nf%*Qt~{!$w_q)Oi0+brp{Jtw#5{ z)u=nIi<{$d=~sPp-)c*BsyZ$99i??1tv5thF`d}`Tu>2xbaynp)4S0tz$)ke*7tt;!I(=6V%RJTU- z&GE<{mp9etS5C&Q936M`QEeQyCv)^XIH?r(ADZpGe&xC}R^5{L)a^V^-mNbu z>vD2=-%3AM4oIucCi6mxS4^HYnI}8fMa*Lt?{ie`sCKI_aqan)(~_5aAI``7-A4V} zbMx{Z_ua#}q8sw#Qloy>KPfk{Zf8W+gAv~QK4fQ)&70%n`28_PyuR@@drzOn`{!Zz zo2ZmagRmU%O7WOs+y|_~;Z^6f)nIp6uhJJ?u8q~W(rRK&D@WCS^K$#lfhjPo9_kMIn&=di7b-5bgC`cIWI)}Xl0G2i`4`4D@! z^el_}Uu3y7#(NMu?n$vSthDb()9aFbIcn5t$IjpUzP}zRc0Y=rzU&P@*T_?I{IykSllIB0*Z9Me@x{}p;$9oiGMVrAJx015oQ53x z`u^-rvFrZHmE8x)JBH;NN%qr)rIVO0roY+wy6R8nZSS#Ctl-&eW8Lk1XXdqlY3^xR}_zG5GM-a)g)N;}@i@$>8tnl~2<^HnREqx~n` z_x`#ZjP+4W&kOrS;5*i{?u@E8cNqJu(=6ed-h@VyvEzL|eGYrq9GJsvb@Q8SBlX0=0>Ap_s;;~W&U%iA}sUHs@`}&n))l=X( z`sge?Ez#g}d;WXlV0OT)(V|{?vVV0uSm}+J1YM$6_5i;nA7ZFJ5H)YtPnR*k5Zs z8}u8iH%!K?Kkw^Lkn{7$O8Vwf{5NEs(bAk9VH#7Jm#){%*%#IAeAVU7Q`p8jmBn3H zzaGW1_P#_;4)z{C^{P*`oBglYTL;khAh)0&jrU`@hxHjqE6WZJ?Vg(Q*;wbQi)ZLD zomfWOf6JX`jQ>D7x=Zc;qIVC4s5a2$`=Q1@Q|;-Tw`TWN zyw*pjBRnf~w7b|Yn9^aw+psTQboa^mUa?0`=Chm7EBAP?H$=QN91YC^(kbxc5r%l#EPc}#S?LQv{zbkpCtA2vpV*6Cmx;*HfDb5?>hsj{|A6rBYX-RtcWNe zG(ggz{U`F{A_7P#nl4au0Z?cWC^f?60Ngn)(q|ab=VX8snvDM6CH$vLkrVzde|h|8 zW&CGd|8LTyYgz<20fepP0A^Kw#;+RQ!J$VF3Ew}ZOC0Q7Ho%{Kla&6^$VVDC^0@Le zK-~@rfXa4}?~O)3z=5H18bZK8hqwTHqf-c4gZk2-E+8^%5fV~cC2LM%z6?0LCI7D= zIsWTCcIH<8Uts|tt)$q@v(7tDLdID-Sa3K}I^$Y6midGw$a24oYF_I6iJNDDtt9vZ?d< z?8z#d6*zsMNI!)456{*~4deFYngpL=zz`TfqbBQg&E;h5;?&Sh4CVQ2M{v->C@sM` z)@t9BowhX^Z%W^k{hTPGu|pDu@6=d{oe~C4;?(iofKm+S3Y6~7=(1;@k+v#FaJ<4m zYp`IX_(conKWp3@4)RuXX^pcI$N6yNojt_L|5(J|VdTK5`Bn25swTh@Hzv_wh61`!k$)4-J0NzDXT<KG;!YG`R}bmQSs`1$ZNzJkT7n>FpzpM9^-MXvk*>+4fOHlhL)=|b5|7Z zhQo)!#}6M6#u)q^8Qp)BD1vJ-(SP?JTOUmCuj|VX$??Aw%A@rMAMiVNIZ%^-wOhRp zGo?{xb^GNenTuU26Wu9a_P2h!UGel7}7 z0~qYnK}47kqhJGYl!76~2Ve||;U=J=PqOv@V|+>eqx@4Y|KDT7ye9vDzWz`5s{X!r z8Jsk)iWeu1n?s)K|L?Kl^Y=*U-=K;M^5fC$!>6eEuRWy8`5yAYv=S(&EDh>CA`4t- zKXiZx1%wW#xJaTyUGNA+m*+=a?^~+>d)^BA-)_kDZajNdZvU^e|G$U-;3)ps{`lY7 zp1%_#U=Ra1Qw@IJ7T|uNW**zo_(hrTMeWvZd$1crNvDcG*uaco5F}T%&0u$UCx`ft z`QZR*$tms>)_BTULxG~X#Y#&--PG>jo(FW|4Aufd8285%uJuv#y7OG?mf(`F&R7mM z4E&;jPoO8zM(}7!9rGMEQ4wI_62_N5}v{_ zKn@0pcHBhB`Ws***HaA{&oOM?oIP6@%IEf8JGBIo5J_!_kc60O?h~sZ4&jyGz?!ik z%tLWrJG|}#Qu9TQ@&15ONI+=p|24bo;8|M;X&`i?0cH6H7)2+61QhpSK?Hz%#MT%f zG*0XCQV%Tz#lkTVX1M>E1o)!!v|z5OTF}po6{E`4}NEUi;DjR7C;m67P{N_8?$BGms1m znfZK0tEH2&cxbSJg;8;Y$m|-m8we?z%Y9gg0@m;GlP=F!>Qw-h`NkVJ zoo9p-+t%6yOv=KUIQH!T)+TKN`eWf!G2{jzJUyO--pUmF{0uO!YqwH91GMPd{iklt z0gUDVAteio0hD6zYvlkCt7JW3*(O$D1(xINF&ny$=g#i;%|bPRzR&kMUu79`I<*WF ztMBhtdw4er|8Dm`ApB$NX1|oIo3Z;=bVpxp_hnVqXY9UI{-ZrY;GyE1hlDt!dixIg z0V26ed#Ia%Tx_LKL{FnDFtFefwIPIo(;q!SHPY(QC^*QJ{{=AlqW=&59CG~UteWz( zK4;Vay~2YWcluIq9suC}1$Qn^j`#hGdQF_2^V-cpZUFqOWqx(sl>SjJN4W^|A-^j` z8wgZ);=acMg0k?Ds{r>#?KiXljBE}V3O;B@adiK5(fO0O$feB`|MOhFNdE$rs9t^M zH~k^k|2NkE6R$oJwECk*WzG{0aMg$IKQi+=|M$V#OI1vT zKKIW{w0KdzB#r9%`9;lZ99=GP!Nl2{RYLEkta^@oQu+sNqbCvyKZXuP0S!Ts{E4DZ zXa1Y=}D@BNCpl?88{_S1_pU{Au8<64Z7x+H0Kk8FVVm2=K0@iPGhFi zvdRD1?%zqhru9Pq)W2k>jEV#I;Hp+UJpQ9gFlAc5tQSw|U!Xjmv>CC|iyQ@b4-|V; z#|%(T6CGcW9%d{IK%nmv!vD-5vli*0$fI`*TC6!+C2LRUpOO{*KW$H#clpcZ|K{>P zuK$GiWgPJ@Awpk-oZg@s91RMquAY>=xE7XfxFk z9JZog`fAreRyqD>c0qp^PV-ydB<24RRSHE@Q7H)_UodvC{7^{LPEjtrJz+o)@o^o4 z;-9FkhC(Yw;|G)h_H~4MK?vY(@i*cB9$(J?b(y=BNZI@;a{j+L|Bv&32TDd!ANjIz z-@haPv^Q8P3X~)Zf9K@YRv-Xd>e0XkOop5l4IK5S3bSdzNUi9^d>U~Mr2F+>QqiX9 zC}`ofd4X+mYBRE*pDa{1__UUt` z$EryRZ-P=o9LoB_kv7_&N%>3D$ZRZyTp~rMi4-)T+#Fr3%)Mihnkm}4-WlMWx!+DM zUye`HBGS0fQ4>~k$EK&)bZYqB3DP=iJdSVi{bD>G(r1Cfnx@X+Uh(r>#c8v69;7}= zq?{~1Q!?*JLjlSRvN%D_A$@L|QiK$;fK&F4mh?ljjC7ge z9pWIW74L)e*kO`>IngU#d-ixv=bx?GF-I2*YaOS`jev@?F`NzCq1=sS2{qzf(XyGFfwf04va5U=~;TF%TzN+U@c`NFs} z=S|iW>uyuUUq27=vZG@$yZ2wC(PaN7b8h$gbZ^CJTJ!s0@!XUyK)aZCq%*f)KYyFK zS-fBRY)RVqtM^)-uUBYbX8f0H(mkDVpRXMIFr~>?_kH{vGuOWC_i4(0l1e&rj=g4$ z^Tb`VTs@G8qc&&X?eM$&Z{~So8u)Be=)tF<+n11jS-W4g2WOsbj(;|~!4s}Qy4xCS z_a5ueJ?l5?XO9=%!1=*@B>Mv~XDchfljr#3%=@l;9#R80=M^*enUez+g$&sQnm=8| zOBdJh2eNi?f5q#51AGQjDlcaF+T>W(%4Nu!PMof}2A_HDc~H9Hj-d2Kr*ZlH{gKSW zi)>vXw`cD$mCdi67t5ql^A0ilPPKRZ6kaAWF3~e;iJkn4jx)0+$=b&{Ps*o(#Q;9# zn#E;S$Pe~dyr${7DX)WljxK87>NIC@83(#}aa_fmHfrgyc|Crr-^Tv0`Q!>j{f-BhaeL^Rd~D0!@W4dvNq*3L zT}Q?XubsFGS%Wa)YUB(nR?jc|vVV2tmx2TC9W4dXHuntt5m%)C9~B^#4@KUXMvEup z{Q=eQ^3an^haMb5zOwzaH1T~D)N}z40A3)Vs0t}i`&lu%m9r+r|02(DIsQlU{NMN3 zfUm{>7V*D}{oh604>s-op0#@5F7U*!*MhUpvYRzQ)!yQjOu=~ktPPOu_|qP*$%q+4 zYVn9Gf-K448S(md@HMc}@x8KQgY3OtL5sxWXZ1bX@n3f^#<$4Y-Zs8P+VC_UF>Axj z$%tvo!(<{dHsPC$nYK%d$IRN;Yci&d?#1I}Z4@*a?{iWqAeqXHy+#JV{{ZZ}B>z2{$N%Rh>nD9#SN>b1uewLA z=M?GNMILjq~zqpeDcZ2shbc>GuW0=~cbBIQ@)Gmy_fJ_Gp- Iy!8zHFQhHqt^fc4 diff --git a/pkgs/si-docker-image-2023-09-13.sipkg b/pkgs/si-docker-image-2023-09-13.sipkg deleted file mode 100644 index daeb2a80f903fe6bc5c59fb81935c2a0c2cfced2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62464 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