From 31a4edf86843c5ceb9d8e5f33a6b3152eef63747 Mon Sep 17 00:00:00 2001 From: crimson-knight Date: Wed, 23 Sep 2026 21:21:58 -0400 Subject: [PATCH 1/4] chore(deps): bump Grant pin for tenancy parity --- scripts/smoke_generated_web.sh | 5 +++++ spec/commands/new_command_spec.cr | 7 +++++++ spec/generators/native_app_spec.cr | 8 ++++++++ src/amber_cli/commands/new.cr | 3 ++- src/amber_cli/generators/native_app.cr | 8 +++++++- src/amber_cli/templates/app/shard.lock.ecr | 23 ++++++++++++++++++++++ src/amber_cli/templates/app/shard.yml.ecr | 2 +- 7 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 src/amber_cli/templates/app/shard.lock.ecr diff --git a/scripts/smoke_generated_web.sh b/scripts/smoke_generated_web.sh index 6ced71b..cd489d8 100755 --- a/scripts/smoke_generated_web.sh +++ b/scripts/smoke_generated_web.sh @@ -35,6 +35,7 @@ grep -F "version: 2.0.0-beta.5" "$app_path/shard.yml" grep -F "github: crimson-knight/grant" "$app_path/shard.yml" grep -F "github: amberframework/asset_pipeline" "$app_path/shard.yml" grep -F "version: ~> 0.37.0" "$app_path/shard.yml" +grep -F "commit: c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3" "$app_path/shard.yml" grep -F "github: crystal-lang/crystal-sqlite3" "$app_path/shard.yml" grep -F "template: ecr" "$app_path/.amber.yml" grep -F "database: sqlite" "$app_path/.amber.yml" @@ -62,6 +63,10 @@ env GIT_CONFIG_COUNT=1 \ GIT_CONFIG_KEY_0=core.hooksPath \ GIT_CONFIG_VALUE_0=/dev/null \ shards install +grep -F "version: 0.23.4+git.commit.c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3" shard.lock +grep -F "checksum: sha256:7f6a90355f173d4a0f4110cf14f2924e935fbb43dab695deee7e346fe2008ed6" shard.lock +grep -F "version: 0.14.0+git.commit.9fff44dd1f61446f9aaffafbb50c4118fe92a3dc" shard.lock +grep -F "checksum: sha256:4a4dea15c27b985cd9d8c5c545024daafab347b56986252fd24fcc3f18e5c024" shard.lock "$cli_path" assets build "$cli_path" assets check crystal spec diff --git a/spec/commands/new_command_spec.cr b/spec/commands/new_command_spec.cr index d68c6ae..a6cd55b 100644 --- a/spec/commands/new_command_spec.cr +++ b/spec/commands/new_command_spec.cr @@ -89,11 +89,18 @@ describe AmberCLI::Commands::NewCommand do shard.should contain("version: 2.0.0-beta.5") shard.should contain("grant:") shard.should contain("github: crimson-knight/grant") + shard.should contain("commit: c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3") shard.should contain("asset_pipeline:") shard.should contain("github: amberframework/asset_pipeline") shard.should contain("github: crystal-lang/crystal-sqlite3") shard.should_not contain("slang") + shard_lock = File.read(File.join(destination, "shard.lock")) + shard_lock.should contain("version: 0.23.4+git.commit.c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3") + shard_lock.should contain("checksum: sha256:7f6a90355f173d4a0f4110cf14f2924e935fbb43dab695deee7e346fe2008ed6") + shard_lock.should contain("version: 0.14.0+git.commit.9fff44dd1f61446f9aaffafbb50c4118fe92a3dc") + shard_lock.should contain("checksum: sha256:4a4dea15c27b985cd9d8c5c545024daafab347b56986252fd24fcc3f18e5c024") + amber_config = YAML.parse(File.read(File.join(destination, ".amber.yml"))) amber_config["database"].as_s.should eq("sqlite") amber_config["model"].as_s.should eq("grant") diff --git a/spec/generators/native_app_spec.cr b/spec/generators/native_app_spec.cr index 36eb1a1..6e62da0 100644 --- a/spec/generators/native_app_spec.cr +++ b/spec/generators/native_app_spec.cr @@ -32,6 +32,14 @@ describe AmberCLI::Generators::NativeApp do shard_content.should contain("amber:") shard_content.should contain("github: amberframework/amber") shard_content.should contain("version: 2.0.0-beta.5") + shard_content.should contain("github: crimson-knight/grant") + shard_content.should contain("commit: c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3") + + shard_lock = File.read(File.join(project_path, "shard.lock")) + shard_lock.should contain("version: 0.23.4+git.commit.c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3") + shard_lock.should contain("checksum: sha256:7f6a90355f173d4a0f4110cf14f2924e935fbb43dab695deee7e346fe2008ed6") + shard_lock.should contain("version: 0.14.0+git.commit.9fff44dd1f61446f9aaffafbb50c4118fe92a3dc") + shard_lock.should contain("checksum: sha256:4a4dea15c27b985cd9d8c5c545024daafab347b56986252fd24fcc3f18e5c024") # Must have the released asset_pipeline with cross-platform UI support shard_content.should contain("asset_pipeline:") diff --git a/src/amber_cli/commands/new.cr b/src/amber_cli/commands/new.cr index 0876509..244a9f4 100644 --- a/src/amber_cli/commands/new.cr +++ b/src/amber_cli/commands/new.cr @@ -243,6 +243,7 @@ module AmberCLI::Commands # Create all project files create_shard_yml(path, name) + write_text(File.join(path, "shard.lock"), AmberCLI::Generators::GrantDependencyLock::SHARD_LOCK_CONTENT) create_amber_yml(path, name) create_readme(path, name) create_gitignore(path) @@ -287,7 +288,7 @@ dependencies: version: 2.0.0-beta.5 grant: github: crimson-knight/grant - commit: 2665a978b43ac608c68cde9243821f8f8f053372 + commit: c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3 asset_pipeline: github: amberframework/asset_pipeline version: ~> 0.37.0 diff --git a/src/amber_cli/generators/native_app.cr b/src/amber_cli/generators/native_app.cr index fad6175..6db82af 100644 --- a/src/amber_cli/generators/native_app.cr +++ b/src/amber_cli/generators/native_app.cr @@ -29,6 +29,7 @@ module AmberCLI::Generators create_directories create_shard_yml + File.write(File.join(path, "shard.lock"), GrantDependencyLock::SHARD_LOCK_CONTENT) create_amber_yml create_gitignore create_makefile @@ -123,7 +124,7 @@ dependencies: # Grant ORM (ActiveRecord-style, replaces Granite in V2) grant: github: crimson-knight/grant - commit: 2665a978b43ac608c68cde9243821f8f8f053372 + commit: c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3 # Asset Pipeline (cross-platform UI: AppKit, UIKit, Android Views) asset_pipeline: @@ -1841,4 +1842,9 @@ TESTING s.split(/[-_]/).map(&.capitalize).join end end + + # :nodoc: + module GrantDependencyLock + SHARD_LOCK_CONTENT = {{ read_file("src/amber_cli/templates/app/shard.lock.ecr") }} + end end diff --git a/src/amber_cli/templates/app/shard.lock.ecr b/src/amber_cli/templates/app/shard.lock.ecr new file mode 100644 index 0000000..6ad40e4 --- /dev/null +++ b/src/amber_cli/templates/app/shard.lock.ecr @@ -0,0 +1,23 @@ +# Seed the Grant and db pair so adapters with a db version range can resolve +# against Grant's exact db commit; shards-alpha install completes this lock. +version: 2.0 +shards: + amber: + git: https://github.com/amberframework/amber.git + version: 2.0.0-beta.5 + checksum: sha256:464a88df0fd3f089f916b951084ed459c681abea6c8064ab4a9149c75eb29ca8 + + asset_pipeline: + git: https://github.com/amberframework/asset_pipeline.git + version: 0.37.0 + checksum: sha256:e43403a6d68efe3494e85e54d1caed8db589c313221b01290c162d981ecc89f5 + + db: + git: https://github.com/crystal-lang/crystal-db.git + version: 0.14.0+git.commit.9fff44dd1f61446f9aaffafbb50c4118fe92a3dc + checksum: sha256:4a4dea15c27b985cd9d8c5c545024daafab347b56986252fd24fcc3f18e5c024 + + grant: + git: https://github.com/crimson-knight/grant.git + version: 0.23.4+git.commit.c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3 + checksum: sha256:7f6a90355f173d4a0f4110cf14f2924e935fbb43dab695deee7e346fe2008ed6 diff --git a/src/amber_cli/templates/app/shard.yml.ecr b/src/amber_cli/templates/app/shard.yml.ecr index d82e560..a348abf 100644 --- a/src/amber_cli/templates/app/shard.yml.ecr +++ b/src/amber_cli/templates/app/shard.yml.ecr @@ -18,7 +18,7 @@ dependencies: version: 2.0.0-beta.5 grant: github: crimson-knight/grant - commit: 2665a978b43ac608c68cde9243821f8f8f053372 + commit: c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3 asset_pipeline: github: amberframework/asset_pipeline version: ~> 0.37.0 From 9fdad6527525b2c53261047db24f5eab0642dfea Mon Sep 17 00:00:00 2001 From: crimson-knight Date: Thu, 24 Sep 2026 14:23:39 -0400 Subject: [PATCH 2/4] chore(deps): update Grant pin and remove lock seed --- README.md | 14 ++++---- docs/BETA_WEB_APP.md | 14 ++++---- scripts/smoke_generated_web.sh | 42 ++++++++++++++++------ spec/commands/new_command_spec.cr | 11 +++--- spec/generators/native_app_spec.cr | 14 +++----- src/amber_cli/commands/new.cr | 24 +++++++------ src/amber_cli/generators/native_app.cr | 15 ++------ src/amber_cli/templates/app/.amber.yml.ecr | 2 +- src/amber_cli/templates/app/README.md.ecr | 9 +++-- src/amber_cli/templates/app/shard.lock.ecr | 23 ------------ src/amber_cli/templates/app/shard.yml.ecr | 2 +- 11 files changed, 79 insertions(+), 91 deletions(-) delete mode 100644 src/amber_cli/templates/app/shard.lock.ecr diff --git a/README.md b/README.md index 1985bec..e7b58f3 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ on authentication, API-resource, or native output. ## Install -Prerequisites: Crystal 1.20 or newer (but earlier than 2.0), `shards`, and Git. +Prerequisites: Crystal 1.20 or newer (but earlier than 2.0), `shards-alpha`, and Git. ### Homebrew on macOS or Linux @@ -58,13 +58,13 @@ command with `sudo` if `/usr/local/bin` is not writable. amber new my_app --type web cd my_app amber assets check -crystal spec -crystal build src/my_app.cr -o bin/my_app +crystal-alpha spec +crystal-alpha build src/my_app.cr -o bin/my_app amber watch ``` `amber new` installs shards by default and compiles the starter assets. Pass -`--no-deps` when an offline or CI workflow needs to run `shards install` later. +`--no-deps` when an offline or CI workflow needs to run `shards-alpha install` later. `amber watch` recompiles assets before the application whenever an ECR template or a file under `app/assets/` changes. Open . @@ -180,9 +180,9 @@ See the [LSP setup guide](https://github.com/amberframework/amber/blob/v2.0.0-be ## Contributing ```bash -shards install -crystal tool format --check src spec -crystal spec +shards-alpha install +crystal-alpha tool format --check src spec +crystal-alpha spec ``` See [CONTRIBUTING.md](CONTRIBUTING.md) for the project workflow. diff --git a/docs/BETA_WEB_APP.md b/docs/BETA_WEB_APP.md index c668d36..d58444b 100644 --- a/docs/BETA_WEB_APP.md +++ b/docs/BETA_WEB_APP.md @@ -7,8 +7,8 @@ and ARM64 Linux. Windows x86-64 compilation is checked in CI. ## 1. Verify the toolchain ```bash -crystal --version -shards --version +crystal-alpha --version +shards-alpha --version amber --version ``` @@ -69,8 +69,8 @@ downloads in `app/assets/files/`. ```bash amber assets build amber assets check -crystal spec -crystal build src/amber_beta_smoke.cr -o bin/amber_beta_smoke +crystal-alpha spec +crystal-alpha build src/amber_beta_smoke.cr -o bin/amber_beta_smoke ``` `amber new` already performs the first asset build. Running both commands here @@ -134,7 +134,7 @@ amber generate scaffold Pet name:string:required species:string:required adopted amber database migrate AMBER_ENV=test amber database migrate amber database status -crystal spec +crystal-alpha spec ``` That one scaffold command creates: @@ -164,7 +164,7 @@ amber generate migration CreatePosts ``` Review generated files before adding them to an application. Run -`amber database migrate`, `crystal tool format --check src spec`, and -`crystal spec` after generation. The release smoke test generates, migrates, +`amber database migrate`, `crystal-alpha tool format --check src spec`, and +`crystal-alpha spec` after generation. The release smoke test generates, migrates, compiles, and exercises a Pet create/update flow. See [Generator support](GENERATOR_SUPPORT.md) for the remaining preview surfaces. diff --git a/scripts/smoke_generated_web.sh b/scripts/smoke_generated_web.sh index cd489d8..10bb37a 100755 --- a/scripts/smoke_generated_web.sh +++ b/scripts/smoke_generated_web.sh @@ -9,6 +9,16 @@ fi cli_path="$1" framework_commit="${2:-}" framework_repository="${3:-amberframework/amber}" +if command -v shards-alpha >/dev/null 2>&1; then + shards_command="shards-alpha" +else + shards_command="shards" +fi +if command -v crystal-alpha >/dev/null 2>&1; then + crystal_command="crystal-alpha" +else + crystal_command="crystal" +fi script_dir="$(cd "$(dirname "$0")" && pwd)" if [[ "$cli_path" != /* ]]; then cli_path="$(cd "$(dirname "$cli_path")" && pwd)/$(basename "$cli_path")" @@ -35,7 +45,7 @@ grep -F "version: 2.0.0-beta.5" "$app_path/shard.yml" grep -F "github: crimson-knight/grant" "$app_path/shard.yml" grep -F "github: amberframework/asset_pipeline" "$app_path/shard.yml" grep -F "version: ~> 0.37.0" "$app_path/shard.yml" -grep -F "commit: c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3" "$app_path/shard.yml" +grep -F "commit: 039b29468e3a1b853d9e16ba9d0738c12ea1ee23" "$app_path/shard.yml" grep -F "github: crystal-lang/crystal-sqlite3" "$app_path/shard.yml" grep -F "template: ecr" "$app_path/.amber.yml" grep -F "database: sqlite" "$app_path/.amber.yml" @@ -58,18 +68,28 @@ if [[ -n "$framework_commit" ]]; then fi cd "$app_path" +test ! -e shard.lock +! grep -F "shard.lock" .gitignore "$cli_path" assets check env GIT_CONFIG_COUNT=1 \ GIT_CONFIG_KEY_0=core.hooksPath \ GIT_CONFIG_VALUE_0=/dev/null \ - shards install -grep -F "version: 0.23.4+git.commit.c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3" shard.lock -grep -F "checksum: sha256:7f6a90355f173d4a0f4110cf14f2924e935fbb43dab695deee7e346fe2008ed6" shard.lock -grep -F "version: 0.14.0+git.commit.9fff44dd1f61446f9aaffafbb50c4118fe92a3dc" shard.lock -grep -F "checksum: sha256:4a4dea15c27b985cd9d8c5c545024daafab347b56986252fd24fcc3f18e5c024" shard.lock + "$shards_command" install +test -s shard.lock +grep -F "version: 0.23.4+git.commit.039b29468e3a1b853d9e16ba9d0738c12ea1ee23" shard.lock +grep -F "version: 0.14.0" shard.lock +if [[ "$shards_command" == "shards-alpha" ]]; then + grep -F "checksum: sha256:04f8f32387f3562f615ef0472f920ecc62ae4254745bea7cb51563a019c2c739" shard.lock + grep -F "checksum: sha256:4a4dea15c27b985cd9d8c5c545024daafab347b56986252fd24fcc3f18e5c024" shard.lock + shard_count="$(grep -cE '^ [[:alnum:]_-]+:$' shard.lock)" + checksum_count="$(grep -cE '^ checksum: sha256:[0-9a-f]{64}$' shard.lock)" + test "$checksum_count" -eq "$shard_count" +else + echo "shards-alpha unavailable; checksum lock assertions skipped" >&2 +fi "$cli_path" assets build "$cli_path" assets check -crystal spec +"$crystal_command" spec "$cli_path" generate scaffold Pet name:string:required species:string:required adopted:bool "$cli_path" generate job PublishPost --queue=default @@ -101,13 +121,13 @@ if find src spec -iname '*slang*' -print | grep -q .; then echo "a core generator emitted a Slang file" >&2 exit 1 fi -crystal tool format --check src spec -crystal spec +"$crystal_command" tool format --check src spec +"$crystal_command" spec "$cli_path" assets build "$cli_path" assets check -crystal build src/amber_beta_smoke.cr -o bin/amber_beta_smoke +"$crystal_command" build src/amber_beta_smoke.cr -o bin/amber_beta_smoke -asset_paths="$(crystal run "$script_dir/read_asset_paths.cr" -- \ +asset_paths="$("$crystal_command" run "$script_dir/read_asset_paths.cr" -- \ public/assets/manifest.json \ stylesheets/app.css \ javascript/app.js \ diff --git a/spec/commands/new_command_spec.cr b/spec/commands/new_command_spec.cr index a6cd55b..85552c4 100644 --- a/spec/commands/new_command_spec.cr +++ b/spec/commands/new_command_spec.cr @@ -89,17 +89,16 @@ describe AmberCLI::Commands::NewCommand do shard.should contain("version: 2.0.0-beta.5") shard.should contain("grant:") shard.should contain("github: crimson-knight/grant") - shard.should contain("commit: c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3") + shard.should contain("commit: 039b29468e3a1b853d9e16ba9d0738c12ea1ee23") shard.should contain("asset_pipeline:") shard.should contain("github: amberframework/asset_pipeline") shard.should contain("github: crystal-lang/crystal-sqlite3") shard.should_not contain("slang") - shard_lock = File.read(File.join(destination, "shard.lock")) - shard_lock.should contain("version: 0.23.4+git.commit.c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3") - shard_lock.should contain("checksum: sha256:7f6a90355f173d4a0f4110cf14f2924e935fbb43dab695deee7e346fe2008ed6") - shard_lock.should contain("version: 0.14.0+git.commit.9fff44dd1f61446f9aaffafbb50c4118fe92a3dc") - shard_lock.should contain("checksum: sha256:4a4dea15c27b985cd9d8c5c545024daafab347b56986252fd24fcc3f18e5c024") + File.exists?(File.join(destination, "shard.lock")).should be_false + readme = File.read(File.join(destination, "README.md")) + readme.should contain("shards-alpha install") + readme.should contain("checksum-verified lock file") amber_config = YAML.parse(File.read(File.join(destination, ".amber.yml"))) amber_config["database"].as_s.should eq("sqlite") diff --git a/spec/generators/native_app_spec.cr b/spec/generators/native_app_spec.cr index 6e62da0..1d9e755 100644 --- a/spec/generators/native_app_spec.cr +++ b/spec/generators/native_app_spec.cr @@ -33,13 +33,8 @@ describe AmberCLI::Generators::NativeApp do shard_content.should contain("github: amberframework/amber") shard_content.should contain("version: 2.0.0-beta.5") shard_content.should contain("github: crimson-knight/grant") - shard_content.should contain("commit: c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3") - - shard_lock = File.read(File.join(project_path, "shard.lock")) - shard_lock.should contain("version: 0.23.4+git.commit.c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3") - shard_lock.should contain("checksum: sha256:7f6a90355f173d4a0f4110cf14f2924e935fbb43dab695deee7e346fe2008ed6") - shard_lock.should contain("version: 0.14.0+git.commit.9fff44dd1f61446f9aaffafbb50c4118fe92a3dc") - shard_lock.should contain("checksum: sha256:4a4dea15c27b985cd9d8c5c545024daafab347b56986252fd24fcc3f18e5c024") + shard_content.should contain("commit: 039b29468e3a1b853d9e16ba9d0738c12ea1ee23") + File.exists?(File.join(project_path, "shard.lock")).should be_false # Must have the released asset_pipeline with cross-platform UI support shard_content.should contain("asset_pipeline:") @@ -140,9 +135,10 @@ describe AmberCLI::Generators::NativeApp do makefile_content.should contain("macos-release:") makefile_content.should contain("setup:") makefile_content.should contain("spec:") - makefile_content.should contain("command -v shards-alpha") + makefile_content.should contain("shards-alpha install") + makefile_content.should contain("checksum-verified shard.lock") makefile_content.should contain("$(CRYSTAL) spec spec/ -Dmacos") - makefile_content.should_not contain("shards install || true") + makefile_content.should_not contain("shards install") end end diff --git a/src/amber_cli/commands/new.cr b/src/amber_cli/commands/new.cr index 244a9f4..8118265 100644 --- a/src/amber_cli/commands/new.cr +++ b/src/amber_cli/commands/new.cr @@ -150,7 +150,7 @@ module AmberCLI::Commands puts "" info "To get started:" info " cd #{name}" unless name == "." - info " make setup # Install shards + create symlinks" + info " make setup # Install shards-alpha + create symlinks" info " make macos # Build for macOS" info " make run # Build and run" info " make spec # Run Crystal specs" @@ -187,8 +187,8 @@ module AmberCLI::Commands puts "" info "To get started:" info " cd #{name}" unless name == "." - info " shards install" if no_deps - info " crystal spec" + info " shards-alpha install" if no_deps + info " crystal-alpha spec" info " amber generate scaffold Pet name:string:required species:string:required" info " amber database migrate" info " amber watch" @@ -198,7 +198,7 @@ module AmberCLI::Commands private def install_dependencies(path : String) info "Installing dependencies..." status = Process.run( - "shards", + "shards-alpha", ["install"], chdir: path, input: Process::Redirect::Inherit, @@ -208,11 +208,11 @@ module AmberCLI::Commands return if status.success? warning "Dependency installation failed; the project files were kept." - warning "Run 'shards install' in #{path} after resolving the error." + warning "Run 'shards-alpha install' in #{path} after resolving the error." exit!(error: true) rescue ex : File::NotFoundError - warning "The 'shards' executable was not found; the project files were kept." - warning "Install Crystal and run 'shards install' in #{path}." + warning "The 'shards-alpha' executable was not found; the project files were kept." + warning "Install the Amber toolchain and run 'shards-alpha install' in #{path}." exit!(error: true) end @@ -243,7 +243,6 @@ module AmberCLI::Commands # Create all project files create_shard_yml(path, name) - write_text(File.join(path, "shard.lock"), AmberCLI::Generators::GrantDependencyLock::SHARD_LOCK_CONTENT) create_amber_yml(path, name) create_readme(path, name) create_gitignore(path) @@ -288,7 +287,7 @@ dependencies: version: 2.0.0-beta.5 grant: github: crimson-knight/grant - commit: c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3 + commit: 039b29468e3a1b853d9e16ba9d0738c12ea1ee23 asset_pipeline: github: amberframework/asset_pipeline version: ~> 0.37.0 @@ -322,15 +321,18 @@ An ECR web application generated by Amber CLI for Amber `2.0.0-beta.5`. ## Run it ```bash -shards install +shards-alpha install amber assets build amber assets check -crystal spec +crystal-alpha spec amber generate scaffold Pet name:string:required species:string:required adopted:bool amber database migrate amber watch ``` +The shards-alpha install command creates the checksum-verified lock file +shard.lock. Keep that file in version control with the application. + Open for the starter page or after generating the example scaffold. diff --git a/src/amber_cli/generators/native_app.cr b/src/amber_cli/generators/native_app.cr index 6db82af..87738f5 100644 --- a/src/amber_cli/generators/native_app.cr +++ b/src/amber_cli/generators/native_app.cr @@ -29,7 +29,6 @@ module AmberCLI::Generators create_directories create_shard_yml - File.write(File.join(path, "shard.lock"), GrantDependencyLock::SHARD_LOCK_CONTENT) create_amber_yml create_gitignore create_makefile @@ -124,7 +123,7 @@ dependencies: # Grant ORM (ActiveRecord-style, replaces Granite in V2) grant: github: crimson-knight/grant - commit: c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3 + commit: 039b29468e3a1b853d9e16ba9d0738c12ea1ee23 # Asset Pipeline (cross-platform UI: AppKit, UIKit, Android Views) asset_pipeline: @@ -246,12 +245,9 @@ all: macos # --- First-time setup --- +# Writes a checksum-verified shard.lock; commit it with the project. setup: - @if command -v shards-alpha >/dev/null 2>&1; then \ - shards-alpha install; \ - else \ - shards install; \ - fi + shards-alpha install @# crystal-audio shard name has a hyphen but source uses underscore @# Crystal's require resolution needs the underscore directory @if [ ! -e lib/crystal_audio ]; then \\ @@ -1842,9 +1838,4 @@ TESTING s.split(/[-_]/).map(&.capitalize).join end end - - # :nodoc: - module GrantDependencyLock - SHARD_LOCK_CONTENT = {{ read_file("src/amber_cli/templates/app/shard.lock.ecr") }} - end end diff --git a/src/amber_cli/templates/app/.amber.yml.ecr b/src/amber_cli/templates/app/.amber.yml.ecr index 9cd10aa..d84e6e9 100644 --- a/src/amber_cli/templates/app/.amber.yml.ecr +++ b/src/amber_cli/templates/app/.amber.yml.ecr @@ -24,6 +24,6 @@ watch: # - ./src/some_irrelevant_file.cr spec: run_commands: - - AMBER_ENV=test crystal spec + - AMBER_ENV=test crystal-alpha spec include: - ./spec/**/*.cr diff --git a/src/amber_cli/templates/app/README.md.ecr b/src/amber_cli/templates/app/README.md.ecr index 73431ab..494510e 100644 --- a/src/amber_cli/templates/app/README.md.ecr +++ b/src/amber_cli/templates/app/README.md.ecr @@ -5,15 +5,18 @@ An ECR web application generated by Amber CLI for Amber `2.0.0-beta.5`. ## Run it ```bash -shards install +shards-alpha install amber assets build amber assets check -crystal spec +crystal-alpha spec amber generate scaffold Pet name:string:required species:string:required amber database migrate amber watch ``` +The shards-alpha install command creates the checksum-verified lock file +shard.lock. Keep that file in version control with the application. + Open . Authored CSS, JavaScript, images, fonts, and other files live under `app/assets/`. `amber assets build` fingerprints them into the generated, gitignored `public/assets/` tree and writes `manifest.json`; edit the @@ -31,5 +34,5 @@ Set at least `AMBER_SERVER_SECRET_KEY_BASE` and `AMBER_DATABASE_URL`. See the ## Tests ```bash -crystal spec +crystal-alpha spec ``` diff --git a/src/amber_cli/templates/app/shard.lock.ecr b/src/amber_cli/templates/app/shard.lock.ecr deleted file mode 100644 index 6ad40e4..0000000 --- a/src/amber_cli/templates/app/shard.lock.ecr +++ /dev/null @@ -1,23 +0,0 @@ -# Seed the Grant and db pair so adapters with a db version range can resolve -# against Grant's exact db commit; shards-alpha install completes this lock. -version: 2.0 -shards: - amber: - git: https://github.com/amberframework/amber.git - version: 2.0.0-beta.5 - checksum: sha256:464a88df0fd3f089f916b951084ed459c681abea6c8064ab4a9149c75eb29ca8 - - asset_pipeline: - git: https://github.com/amberframework/asset_pipeline.git - version: 0.37.0 - checksum: sha256:e43403a6d68efe3494e85e54d1caed8db589c313221b01290c162d981ecc89f5 - - db: - git: https://github.com/crystal-lang/crystal-db.git - version: 0.14.0+git.commit.9fff44dd1f61446f9aaffafbb50c4118fe92a3dc - checksum: sha256:4a4dea15c27b985cd9d8c5c545024daafab347b56986252fd24fcc3f18e5c024 - - grant: - git: https://github.com/crimson-knight/grant.git - version: 0.23.4+git.commit.c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3 - checksum: sha256:7f6a90355f173d4a0f4110cf14f2924e935fbb43dab695deee7e346fe2008ed6 diff --git a/src/amber_cli/templates/app/shard.yml.ecr b/src/amber_cli/templates/app/shard.yml.ecr index a348abf..a65ce33 100644 --- a/src/amber_cli/templates/app/shard.yml.ecr +++ b/src/amber_cli/templates/app/shard.yml.ecr @@ -18,7 +18,7 @@ dependencies: version: 2.0.0-beta.5 grant: github: crimson-knight/grant - commit: c6b5e72c1e2663fe6b5cb6794a5beddd0c34f7a3 + commit: 039b29468e3a1b853d9e16ba9d0738c12ea1ee23 asset_pipeline: github: amberframework/asset_pipeline version: ~> 0.37.0 From 672f6f2cd1b3cfc0105b54a111d0448258e8ad79 Mon Sep 17 00:00:00 2001 From: crimson-knight Date: Thu, 24 Sep 2026 14:43:39 -0400 Subject: [PATCH 3/4] fix(cli): keep shards-alpha optional for generated apps --- README.md | 14 ++++----- docs/BETA_WEB_APP.md | 14 ++++----- scripts/smoke_generated_web.sh | 14 +++++++-- spec/commands/new_command_spec.cr | 33 ++++++++++++++++++++-- spec/generators/native_app_spec.cr | 7 +++-- src/amber_cli/commands/new.cr | 27 ++++++++++-------- src/amber_cli/generators/native_app.cr | 7 +++-- src/amber_cli/templates/app/.amber.yml.ecr | 2 +- src/amber_cli/templates/app/README.md.ecr | 9 +++--- 9 files changed, 87 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index e7b58f3..1985bec 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ on authentication, API-resource, or native output. ## Install -Prerequisites: Crystal 1.20 or newer (but earlier than 2.0), `shards-alpha`, and Git. +Prerequisites: Crystal 1.20 or newer (but earlier than 2.0), `shards`, and Git. ### Homebrew on macOS or Linux @@ -58,13 +58,13 @@ command with `sudo` if `/usr/local/bin` is not writable. amber new my_app --type web cd my_app amber assets check -crystal-alpha spec -crystal-alpha build src/my_app.cr -o bin/my_app +crystal spec +crystal build src/my_app.cr -o bin/my_app amber watch ``` `amber new` installs shards by default and compiles the starter assets. Pass -`--no-deps` when an offline or CI workflow needs to run `shards-alpha install` later. +`--no-deps` when an offline or CI workflow needs to run `shards install` later. `amber watch` recompiles assets before the application whenever an ECR template or a file under `app/assets/` changes. Open . @@ -180,9 +180,9 @@ See the [LSP setup guide](https://github.com/amberframework/amber/blob/v2.0.0-be ## Contributing ```bash -shards-alpha install -crystal-alpha tool format --check src spec -crystal-alpha spec +shards install +crystal tool format --check src spec +crystal spec ``` See [CONTRIBUTING.md](CONTRIBUTING.md) for the project workflow. diff --git a/docs/BETA_WEB_APP.md b/docs/BETA_WEB_APP.md index d58444b..c668d36 100644 --- a/docs/BETA_WEB_APP.md +++ b/docs/BETA_WEB_APP.md @@ -7,8 +7,8 @@ and ARM64 Linux. Windows x86-64 compilation is checked in CI. ## 1. Verify the toolchain ```bash -crystal-alpha --version -shards-alpha --version +crystal --version +shards --version amber --version ``` @@ -69,8 +69,8 @@ downloads in `app/assets/files/`. ```bash amber assets build amber assets check -crystal-alpha spec -crystal-alpha build src/amber_beta_smoke.cr -o bin/amber_beta_smoke +crystal spec +crystal build src/amber_beta_smoke.cr -o bin/amber_beta_smoke ``` `amber new` already performs the first asset build. Running both commands here @@ -134,7 +134,7 @@ amber generate scaffold Pet name:string:required species:string:required adopted amber database migrate AMBER_ENV=test amber database migrate amber database status -crystal-alpha spec +crystal spec ``` That one scaffold command creates: @@ -164,7 +164,7 @@ amber generate migration CreatePosts ``` Review generated files before adding them to an application. Run -`amber database migrate`, `crystal-alpha tool format --check src spec`, and -`crystal-alpha spec` after generation. The release smoke test generates, migrates, +`amber database migrate`, `crystal tool format --check src spec`, and +`crystal spec` after generation. The release smoke test generates, migrates, compiles, and exercises a Pet create/update flow. See [Generator support](GENERATOR_SUPPORT.md) for the remaining preview surfaces. diff --git a/scripts/smoke_generated_web.sh b/scripts/smoke_generated_web.sh index 10bb37a..50a36d9 100755 --- a/scripts/smoke_generated_web.sh +++ b/scripts/smoke_generated_web.sh @@ -19,6 +19,7 @@ if command -v crystal-alpha >/dev/null 2>&1; then else crystal_command="crystal" fi +echo "Using dependency installer: $shards_command" script_dir="$(cd "$(dirname "$0")" && pwd)" if [[ "$cli_path" != /* ]]; then cli_path="$(cd "$(dirname "$cli_path")" && pwd)/$(basename "$cli_path")" @@ -38,7 +39,16 @@ cleanup() { trap cleanup EXIT "$cli_path" --version | grep -E "Amber CLI v2\.0\.[0-9]+" -"$cli_path" new "$app_path" --type web --no-deps +"$cli_path" new "$app_path" --type web +test -s "$app_path/shard.lock" + +grep -F 'shards install' "$app_path/README.md" +grep -F 'crystal spec' "$app_path/README.md" +grep -F '`shards-alpha install` writes a checksum-verified `shard.lock` when `shards-alpha` is installed; commit the lock with the application.' "$app_path/README.md" +test "$(grep -cF '`shards-alpha install` writes a checksum-verified `shard.lock` when `shards-alpha` is installed; commit the lock with the application.' "$app_path/README.md")" -eq 1 +! grep -F 'crystal-alpha' "$app_path/.amber.yml" +grep -F 'AMBER_ENV=test crystal spec' "$script_dir/../src/amber_cli/templates/app/.amber.yml.ecr" +! grep -F 'crystal-alpha' "$script_dir/../src/amber_cli/templates/app/.amber.yml.ecr" grep -F "github: amberframework/amber" "$app_path/shard.yml" grep -F "version: 2.0.0-beta.5" "$app_path/shard.yml" @@ -68,7 +78,7 @@ if [[ -n "$framework_commit" ]]; then fi cd "$app_path" -test ! -e shard.lock +test -s shard.lock ! grep -F "shard.lock" .gitignore "$cli_path" assets check env GIT_CONFIG_COUNT=1 \ diff --git a/spec/commands/new_command_spec.cr b/spec/commands/new_command_spec.cr index 85552c4..6d27547 100644 --- a/spec/commands/new_command_spec.cr +++ b/spec/commands/new_command_spec.cr @@ -2,6 +2,29 @@ require "../amber_cli_spec" require "../../src/amber_cli/commands/new" describe AmberCLI::Commands::NewCommand do + describe ".find_shards_executable" do + it "prefers shards-alpha when it is available" do + executable = AmberCLI::Commands::NewCommand.find_shards_executable( + ->(command : String) { command == "shards-alpha" ? "/tools/shards-alpha" : "/tools/shards" } + ) + + executable.should eq("/tools/shards-alpha") + end + + it "falls back to shards when shards-alpha is unavailable" do + lookup_calls = [] of String + executable = AmberCLI::Commands::NewCommand.find_shards_executable( + ->(command : String) do + lookup_calls << command + command == "shards" ? "/tools/shards" : nil + end + ) + + executable.should eq("/tools/shards") + lookup_calls.should eq(["shards-alpha", "shards"]) + end + end + describe "#setup_command_options" do it "accepts --type web (default)" do command = AmberCLI::Commands::NewCommand.new("new") @@ -97,8 +120,14 @@ describe AmberCLI::Commands::NewCommand do File.exists?(File.join(destination, "shard.lock")).should be_false readme = File.read(File.join(destination, "README.md")) - readme.should contain("shards-alpha install") - readme.should contain("checksum-verified lock file") + readme.should contain("shards install") + readme.should contain("crystal spec") + readme.should contain("writes a checksum-verified `shard.lock`") + readme.scan(/shards-alpha install/).size.should eq(1) + + amber_config_template = File.read(File.expand_path("../../src/amber_cli/templates/app/.amber.yml.ecr", __DIR__)) + amber_config_template.should contain("AMBER_ENV=test crystal spec") + amber_config_template.should_not contain("crystal-alpha") amber_config = YAML.parse(File.read(File.join(destination, ".amber.yml"))) amber_config["database"].as_s.should eq("sqlite") diff --git a/spec/generators/native_app_spec.cr b/spec/generators/native_app_spec.cr index 1d9e755..2b998a3 100644 --- a/spec/generators/native_app_spec.cr +++ b/spec/generators/native_app_spec.cr @@ -135,10 +135,11 @@ describe AmberCLI::Generators::NativeApp do makefile_content.should contain("macos-release:") makefile_content.should contain("setup:") makefile_content.should contain("spec:") - makefile_content.should contain("shards-alpha install") - makefile_content.should contain("checksum-verified shard.lock") + makefile_content.should contain("if command -v shards-alpha >/dev/null 2>&1; then") + makefile_content.should contain("shards-alpha install;") + makefile_content.should contain("else") + makefile_content.should contain("shards install;") makefile_content.should contain("$(CRYSTAL) spec spec/ -Dmacos") - makefile_content.should_not contain("shards install") end end diff --git a/src/amber_cli/commands/new.cr b/src/amber_cli/commands/new.cr index 8118265..6b43eb0 100644 --- a/src/amber_cli/commands/new.cr +++ b/src/amber_cli/commands/new.cr @@ -43,6 +43,11 @@ module AmberCLI::Commands getter no_deps : Bool = false getter name : String = "" + # :nodoc: + def self.find_shards_executable(path_lookup : Proc(String, String?)) : String? + path_lookup.call("shards-alpha") || path_lookup.call("shards") + end + def help_description : String "Generates a new Amber V2 project" end @@ -150,7 +155,7 @@ module AmberCLI::Commands puts "" info "To get started:" info " cd #{name}" unless name == "." - info " make setup # Install shards-alpha + create symlinks" + info " make setup # Install shards + create symlinks" info " make macos # Build for macOS" info " make run # Build and run" info " make spec # Run Crystal specs" @@ -187,8 +192,8 @@ module AmberCLI::Commands puts "" info "To get started:" info " cd #{name}" unless name == "." - info " shards-alpha install" if no_deps - info " crystal-alpha spec" + info " shards install" if no_deps + info " crystal spec" info " amber generate scaffold Pet name:string:required species:string:required" info " amber database migrate" info " amber watch" @@ -197,8 +202,9 @@ module AmberCLI::Commands private def install_dependencies(path : String) info "Installing dependencies..." + shards_executable = self.class.find_shards_executable(->(command : String) { Process.find_executable(command) }) status = Process.run( - "shards-alpha", + shards_executable || "shards", ["install"], chdir: path, input: Process::Redirect::Inherit, @@ -208,11 +214,11 @@ module AmberCLI::Commands return if status.success? warning "Dependency installation failed; the project files were kept." - warning "Run 'shards-alpha install' in #{path} after resolving the error." + warning "Run 'shards install' in #{path} after resolving the error." exit!(error: true) rescue ex : File::NotFoundError - warning "The 'shards-alpha' executable was not found; the project files were kept." - warning "Install the Amber toolchain and run 'shards-alpha install' in #{path}." + warning "The 'shards' executable was not found; the project files were kept." + warning "Install Crystal and run 'shards install' in #{path}." exit!(error: true) end @@ -321,17 +327,16 @@ An ECR web application generated by Amber CLI for Amber `2.0.0-beta.5`. ## Run it ```bash -shards-alpha install +shards install amber assets build amber assets check -crystal-alpha spec +crystal spec amber generate scaffold Pet name:string:required species:string:required adopted:bool amber database migrate amber watch ``` -The shards-alpha install command creates the checksum-verified lock file -shard.lock. Keep that file in version control with the application. +`shards-alpha install` writes a checksum-verified `shard.lock` when `shards-alpha` is installed; commit the lock with the application. Open for the starter page or after generating the example scaffold. diff --git a/src/amber_cli/generators/native_app.cr b/src/amber_cli/generators/native_app.cr index 87738f5..a0f3f1b 100644 --- a/src/amber_cli/generators/native_app.cr +++ b/src/amber_cli/generators/native_app.cr @@ -245,9 +245,12 @@ all: macos # --- First-time setup --- -# Writes a checksum-verified shard.lock; commit it with the project. setup: - shards-alpha install + @if command -v shards-alpha >/dev/null 2>&1; then \\ + shards-alpha install; \\ + else \\ + shards install; \\ + fi @# crystal-audio shard name has a hyphen but source uses underscore @# Crystal's require resolution needs the underscore directory @if [ ! -e lib/crystal_audio ]; then \\ diff --git a/src/amber_cli/templates/app/.amber.yml.ecr b/src/amber_cli/templates/app/.amber.yml.ecr index d84e6e9..9cd10aa 100644 --- a/src/amber_cli/templates/app/.amber.yml.ecr +++ b/src/amber_cli/templates/app/.amber.yml.ecr @@ -24,6 +24,6 @@ watch: # - ./src/some_irrelevant_file.cr spec: run_commands: - - AMBER_ENV=test crystal-alpha spec + - AMBER_ENV=test crystal spec include: - ./spec/**/*.cr diff --git a/src/amber_cli/templates/app/README.md.ecr b/src/amber_cli/templates/app/README.md.ecr index 494510e..fb1f256 100644 --- a/src/amber_cli/templates/app/README.md.ecr +++ b/src/amber_cli/templates/app/README.md.ecr @@ -5,17 +5,16 @@ An ECR web application generated by Amber CLI for Amber `2.0.0-beta.5`. ## Run it ```bash -shards-alpha install +shards install amber assets build amber assets check -crystal-alpha spec +crystal spec amber generate scaffold Pet name:string:required species:string:required amber database migrate amber watch ``` -The shards-alpha install command creates the checksum-verified lock file -shard.lock. Keep that file in version control with the application. +`shards-alpha install` writes a checksum-verified `shard.lock` when `shards-alpha` is installed; commit the lock with the application. Open . Authored CSS, JavaScript, images, fonts, and other files live under `app/assets/`. `amber assets build` fingerprints them into the @@ -34,5 +33,5 @@ Set at least `AMBER_SERVER_SECRET_KEY_BASE` and `AMBER_DATABASE_URL`. See the ## Tests ```bash -crystal-alpha spec +crystal spec ``` From dc80430d0e7e1b3026a56338c4c2760d5752d90d Mon Sep 17 00:00:00 2001 From: crimson-knight Date: Mon, 28 Sep 2026 14:08:55 -0400 Subject: [PATCH 4/4] chore(deps): bump Grant pin for Int64 count APIs --- scripts/smoke_generated_web.sh | 6 +++--- spec/commands/new_command_spec.cr | 2 +- spec/generators/native_app_spec.cr | 2 +- src/amber_cli/commands/new.cr | 2 +- src/amber_cli/generators/native_app.cr | 2 +- src/amber_cli/templates/app/shard.yml.ecr | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/smoke_generated_web.sh b/scripts/smoke_generated_web.sh index 50a36d9..adce84e 100755 --- a/scripts/smoke_generated_web.sh +++ b/scripts/smoke_generated_web.sh @@ -55,7 +55,7 @@ grep -F "version: 2.0.0-beta.5" "$app_path/shard.yml" grep -F "github: crimson-knight/grant" "$app_path/shard.yml" grep -F "github: amberframework/asset_pipeline" "$app_path/shard.yml" grep -F "version: ~> 0.37.0" "$app_path/shard.yml" -grep -F "commit: 039b29468e3a1b853d9e16ba9d0738c12ea1ee23" "$app_path/shard.yml" +grep -F "commit: 70ac8beaa172f03c389bacaff06cd8f3c520805c" "$app_path/shard.yml" grep -F "github: crystal-lang/crystal-sqlite3" "$app_path/shard.yml" grep -F "template: ecr" "$app_path/.amber.yml" grep -F "database: sqlite" "$app_path/.amber.yml" @@ -86,10 +86,10 @@ env GIT_CONFIG_COUNT=1 \ GIT_CONFIG_VALUE_0=/dev/null \ "$shards_command" install test -s shard.lock -grep -F "version: 0.23.4+git.commit.039b29468e3a1b853d9e16ba9d0738c12ea1ee23" shard.lock +grep -F "version: 0.23.4+git.commit.70ac8beaa172f03c389bacaff06cd8f3c520805c" shard.lock grep -F "version: 0.14.0" shard.lock if [[ "$shards_command" == "shards-alpha" ]]; then - grep -F "checksum: sha256:04f8f32387f3562f615ef0472f920ecc62ae4254745bea7cb51563a019c2c739" shard.lock + grep -F "checksum: sha256:f416f65a7b19d54047d345b8a94b2b1c9bf434985849e1aed2a446135bce7ba9" shard.lock grep -F "checksum: sha256:4a4dea15c27b985cd9d8c5c545024daafab347b56986252fd24fcc3f18e5c024" shard.lock shard_count="$(grep -cE '^ [[:alnum:]_-]+:$' shard.lock)" checksum_count="$(grep -cE '^ checksum: sha256:[0-9a-f]{64}$' shard.lock)" diff --git a/spec/commands/new_command_spec.cr b/spec/commands/new_command_spec.cr index 6d27547..9c3d6d7 100644 --- a/spec/commands/new_command_spec.cr +++ b/spec/commands/new_command_spec.cr @@ -112,7 +112,7 @@ describe AmberCLI::Commands::NewCommand do shard.should contain("version: 2.0.0-beta.5") shard.should contain("grant:") shard.should contain("github: crimson-knight/grant") - shard.should contain("commit: 039b29468e3a1b853d9e16ba9d0738c12ea1ee23") + shard.should contain("commit: 70ac8beaa172f03c389bacaff06cd8f3c520805c") shard.should contain("asset_pipeline:") shard.should contain("github: amberframework/asset_pipeline") shard.should contain("github: crystal-lang/crystal-sqlite3") diff --git a/spec/generators/native_app_spec.cr b/spec/generators/native_app_spec.cr index 2b998a3..3d829f4 100644 --- a/spec/generators/native_app_spec.cr +++ b/spec/generators/native_app_spec.cr @@ -33,7 +33,7 @@ describe AmberCLI::Generators::NativeApp do shard_content.should contain("github: amberframework/amber") shard_content.should contain("version: 2.0.0-beta.5") shard_content.should contain("github: crimson-knight/grant") - shard_content.should contain("commit: 039b29468e3a1b853d9e16ba9d0738c12ea1ee23") + shard_content.should contain("commit: 70ac8beaa172f03c389bacaff06cd8f3c520805c") File.exists?(File.join(project_path, "shard.lock")).should be_false # Must have the released asset_pipeline with cross-platform UI support diff --git a/src/amber_cli/commands/new.cr b/src/amber_cli/commands/new.cr index 6b43eb0..506c431 100644 --- a/src/amber_cli/commands/new.cr +++ b/src/amber_cli/commands/new.cr @@ -293,7 +293,7 @@ dependencies: version: 2.0.0-beta.5 grant: github: crimson-knight/grant - commit: 039b29468e3a1b853d9e16ba9d0738c12ea1ee23 + commit: 70ac8beaa172f03c389bacaff06cd8f3c520805c asset_pipeline: github: amberframework/asset_pipeline version: ~> 0.37.0 diff --git a/src/amber_cli/generators/native_app.cr b/src/amber_cli/generators/native_app.cr index a0f3f1b..2372163 100644 --- a/src/amber_cli/generators/native_app.cr +++ b/src/amber_cli/generators/native_app.cr @@ -123,7 +123,7 @@ dependencies: # Grant ORM (ActiveRecord-style, replaces Granite in V2) grant: github: crimson-knight/grant - commit: 039b29468e3a1b853d9e16ba9d0738c12ea1ee23 + commit: 70ac8beaa172f03c389bacaff06cd8f3c520805c # Asset Pipeline (cross-platform UI: AppKit, UIKit, Android Views) asset_pipeline: diff --git a/src/amber_cli/templates/app/shard.yml.ecr b/src/amber_cli/templates/app/shard.yml.ecr index a65ce33..3790e62 100644 --- a/src/amber_cli/templates/app/shard.yml.ecr +++ b/src/amber_cli/templates/app/shard.yml.ecr @@ -18,7 +18,7 @@ dependencies: version: 2.0.0-beta.5 grant: github: crimson-knight/grant - commit: 039b29468e3a1b853d9e16ba9d0738c12ea1ee23 + commit: 70ac8beaa172f03c389bacaff06cd8f3c520805c asset_pipeline: github: amberframework/asset_pipeline version: ~> 0.37.0