shopify-cli 2.7.0 → 2.7.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +2 -2
- data/.github/workflows/shopify.yml +1 -1
- data/.gitignore +2 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +46 -0
- data/Codespace.dockerfile +2 -2
- data/Gemfile.lock +4 -4
- data/Rakefile +27 -0
- data/Tests.dockerfile +2 -2
- data/dev.yml +3 -3
- data/ext/javy/hashes/javy-arm-macos-v0.1.0.gz.sha256 +1 -0
- data/ext/javy/hashes/javy-x86_64-linux-v0.1.0.gz.sha256 +1 -0
- data/ext/javy/hashes/javy-x86_64-macos-v0.1.0.gz.sha256 +1 -0
- data/ext/javy/hashes/javy-x86_64-windows-v0.1.0.gz.sha256 +1 -0
- data/ext/javy/javy.rb +204 -0
- data/ext/javy/version +1 -0
- data/lib/graphql/get_extension_registrations.graphql +27 -0
- data/lib/project_types/extension/cli.rb +27 -2
- data/lib/project_types/extension/commands/build.rb +10 -14
- data/lib/project_types/extension/commands/create.rb +3 -6
- data/lib/project_types/extension/commands/push.rb +36 -8
- data/lib/project_types/extension/extension_project.rb +1 -1
- data/lib/project_types/extension/features/argo_serve.rb +6 -5
- data/lib/project_types/extension/forms/questions/ask_registration.rb +6 -2
- data/lib/project_types/extension/loaders/project.rb +29 -0
- data/lib/project_types/extension/loaders/specification_handler.rb +22 -0
- data/lib/project_types/extension/messages/messages.rb +4 -2
- data/lib/project_types/extension/models/app.rb +1 -1
- data/lib/project_types/extension/models/development_server.rb +2 -2
- data/lib/project_types/extension/models/specification_handlers/default.rb +4 -0
- data/lib/project_types/extension/tasks/convert_server_config.rb +3 -1
- data/lib/project_types/extension/tasks/execute_commands/base.rb +13 -0
- data/lib/project_types/extension/tasks/execute_commands/build.rb +29 -0
- data/lib/project_types/extension/tasks/execute_commands/create.rb +33 -0
- data/lib/project_types/extension/tasks/execute_commands/serve.rb +35 -0
- data/lib/project_types/extension/tasks/merge_server_config.rb +33 -22
- data/lib/project_types/rails/commands/create.rb +2 -4
- data/lib/project_types/script/cli.rb +9 -1
- data/lib/project_types/script/commands/connect.rb +19 -0
- data/lib/project_types/script/commands/create.rb +1 -3
- data/lib/project_types/script/commands/javy.rb +29 -0
- data/lib/project_types/script/commands/push.rb +2 -1
- data/lib/project_types/script/config/extension_points.yml +12 -30
- data/lib/project_types/script/forms/ask_app.rb +32 -0
- data/lib/project_types/script/forms/ask_org.rb +30 -0
- data/lib/project_types/script/forms/ask_script_uuid.rb +22 -0
- data/lib/project_types/script/forms/run_against_shopify_org.rb +14 -0
- data/lib/project_types/script/graphql/app_script_set.graphql +2 -2
- data/lib/project_types/script/layers/application/build_script.rb +0 -1
- data/lib/project_types/script/layers/application/connect_app.rb +79 -0
- data/lib/project_types/script/layers/application/create_script.rb +17 -17
- data/lib/project_types/script/layers/application/push_script.rb +1 -1
- data/lib/project_types/script/layers/domain/errors.rb +1 -4
- data/lib/project_types/script/layers/domain/push_package.rb +3 -3
- data/lib/project_types/script/layers/domain/{script_json.rb → script_config.rb} +2 -2
- data/lib/project_types/script/layers/domain/script_project.rb +5 -1
- data/lib/project_types/script/layers/infrastructure/errors.rb +36 -7
- data/lib/project_types/script/layers/infrastructure/languages/assemblyscript_task_runner.rb +0 -4
- data/lib/project_types/script/layers/infrastructure/languages/typescript_task_runner.rb +0 -4
- data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +2 -2
- data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +125 -27
- data/lib/project_types/script/layers/infrastructure/script_service.rb +11 -11
- data/lib/project_types/script/messages/messages.rb +32 -4
- data/lib/project_types/script/ui/error_handler.rb +31 -21
- data/lib/project_types/theme/commands/pull.rb +3 -0
- data/lib/project_types/theme/commands/push.rb +7 -1
- data/lib/project_types/theme/commands/serve.rb +1 -1
- data/lib/project_types/theme/messages/messages.rb +35 -1
- data/lib/project_types/theme/ui/sync_progress_bar.rb +2 -2
- data/lib/shopify_cli/command/project_command.rb +20 -7
- data/lib/shopify_cli/command.rb +6 -0
- data/lib/shopify_cli/commands/app/create/node.rb +1 -3
- data/lib/shopify_cli/commands/app/create/rails.rb +1 -3
- data/lib/shopify_cli/constants.rb +7 -0
- data/lib/shopify_cli/context.rb +11 -1
- data/lib/shopify_cli/environment.rb +4 -0
- data/lib/shopify_cli/form.rb +2 -0
- data/lib/shopify_cli/git.rb +2 -0
- data/lib/shopify_cli/identity_auth.rb +18 -0
- data/lib/shopify_cli/messages/messages.rb +9 -2
- data/lib/shopify_cli/partners_api/app_extensions/job.rb +36 -0
- data/lib/shopify_cli/partners_api/app_extensions.rb +46 -0
- data/lib/shopify_cli/partners_api/organizations.rb +2 -5
- data/lib/shopify_cli/partners_api.rb +2 -8
- data/lib/shopify_cli/project.rb +8 -7
- data/lib/shopify_cli/resources/env_file.rb +13 -5
- data/lib/shopify_cli/services/app/create/node_service.rb +2 -0
- data/lib/shopify_cli/services/app/create/php_service.rb +1 -1
- data/lib/shopify_cli/services/app/create/rails_service.rb +3 -1
- data/lib/shopify_cli/services/app/serve/node_service.rb +1 -1
- data/lib/shopify_cli/services/app/serve/rails_service.rb +1 -1
- data/lib/shopify_cli/tasks/ensure_authenticated.rb +9 -3
- data/lib/shopify_cli/theme/dev_server/cdn_fonts.rb +73 -0
- data/lib/shopify_cli/theme/dev_server/hot-reload.js +38 -9
- data/lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb +84 -0
- data/lib/shopify_cli/theme/dev_server/proxy.rb +9 -15
- data/lib/shopify_cli/theme/dev_server.rb +32 -19
- data/lib/shopify_cli/theme/syncer/error_reporter.rb +45 -0
- data/lib/shopify_cli/theme/syncer/operation.rb +56 -0
- data/lib/shopify_cli/theme/syncer/standard_reporter.rb +32 -0
- data/lib/shopify_cli/theme/syncer.rb +40 -39
- data/lib/shopify_cli/theme/theme.rb +31 -19
- data/lib/shopify_cli/thread_pool/job.rb +27 -0
- data/lib/shopify_cli/thread_pool.rb +37 -0
- data/lib/shopify_cli/tunnel.rb +26 -22
- data/lib/shopify_cli/version.rb +1 -1
- data/shopify-cli.gemspec +1 -1
- data/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb +3 -1
- data/vendor/deps/cli-kit/lib/cli/kit/system.rb +1 -1
- metadata +34 -8
- data/lib/graphql/all_orgs_with_extensions.graphql +0 -37
- data/lib/project_types/extension/tasks/run_extension_command.rb +0 -82
- data/lib/project_types/script/tasks/ensure_env.rb +0 -106
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '068a38773a84e132b2b1dd435d4e369a2100d2fca4cccb539699e6033f816fb7'
|
4
|
+
data.tar.gz: d4f356f9f4bf9f0e43733da4f223f7e02917d8c29e4193c90eb276ac80a73c5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a163a0878650fbf8c846fa9d510240c3b4f938a621e14558a63788ce56e63a8fe39e6254ef4cc83107cd6b241d2d66e2fe935cd207d47a88c20182ceb7d59d5c
|
7
|
+
data.tar.gz: db35b09603e3ccb0c7a526da096a76663b4ab5f952cb37e1bde4b71fba3509d87c3e8626929e8d20e316a4c04097d3430da98e252b9634d5a0e53586b06ec2a9
|
data/.github/CODEOWNERS
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
* @shopify/core-build-learn
|
2
2
|
* @shopify/development-lifecycle
|
3
3
|
|
4
|
-
/lib/project_types/script/ @shopify/scripts-
|
5
|
-
/test/project_types/script/ @shopify/scripts-
|
4
|
+
/lib/project_types/script/ @shopify/scripts-platform
|
5
|
+
/test/project_types/script/ @shopify/scripts-platform
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.7.
|
1
|
+
2.7.5
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,52 @@
|
|
1
1
|
From version 2.6.0, the sections in this file adhere to the [keep a changelog](https://keepachangelog.com/en/1.0.0/) specification.
|
2
|
+
|
2
3
|
## [Unreleased]
|
3
4
|
|
5
|
+
## Version 2.7.4
|
6
|
+
### Added
|
7
|
+
* [#1825](https://github.com/Shopify/shopify-cli/pull/1825): Support passing the connection information through arguments
|
8
|
+
|
9
|
+
### Fixed
|
10
|
+
* [#1852](https://github.com/Shopify/shopify-cli/pull/1852): Fix `shopify --help` to include `extension` commands
|
11
|
+
* [#1853](https://github.com/Shopify/shopify-cli/pull/1853): Fix javy installation failures from MacOS universal ruby installations
|
12
|
+
* [#1851](https://github.com/Shopify/shopify-cli/pull/1851): Improve `shopify theme push --live` confirmation message to show current live theme
|
13
|
+
* [#1850](https://github.com/Shopify/shopify-cli/pull/1850): Fix `shopify extension` commands timeout when organization has too many apps
|
14
|
+
* [#1860](https://github.com/Shopify/shopify-cli/pull/1860): Fix `theme serve` hot reload when there are many tabs active
|
15
|
+
|
16
|
+
## Version 2.7.3
|
17
|
+
### Added
|
18
|
+
* [#1826](https://github.com/Shopify/shopify-cli/pull/1826): Support using `script.config.yml` file for script configuration
|
19
|
+
* [#1843](https://github.com/Shopify/shopify-cli/pull/1826): Support using javy on Apple ARM processors
|
20
|
+
* [#1847](https://github.com/Shopify/shopify-cli/pull/1847): `shopify script connect` command.
|
21
|
+
|
22
|
+
### Fixed
|
23
|
+
* [#1811](https://github.com/Shopify/shopify-cli/pull/1811): Update theme-check to 1.9.0
|
24
|
+
* [#1831](https://github.com/Shopify/shopify-cli/pull/1831): Ensure correct `ngrok` version is downloaded for Apple M1
|
25
|
+
* [#1823](https://github.com/Shopify/shopify-cli/pull/1823): Indicate git is unavailable; don't error out
|
26
|
+
* [#1807](https://github.com/Shopify/shopify-cli/pull/1807): Fix `--live` parameter, it should not imply `--allow-live` in the `theme push` command
|
27
|
+
* [#1812](https://github.com/Shopify/shopify-cli/pull/1812): App creation with Rails 7
|
28
|
+
* [#1821](https://github.com/Shopify/shopify-cli/pull/1821): Fix Shopify hosted fonts to load via the local preview URL
|
29
|
+
* [#1830](https://github.com/Shopify/shopify-cli/pull/1830): Fix hot reload when users update many files "simultaneously"
|
30
|
+
* [#1837](https://github.com/Shopify/shopify-cli/pull/1837): Fix `ShopifyCLI::Theme::DevServer::CdnFonts` class to support any font
|
31
|
+
|
32
|
+
## Version 2.7.2
|
33
|
+
### Fixed
|
34
|
+
* [#1763](https://github.com/Shopify/shopify-cli/pull/1763): Fix: Tunnel --PORT parameter not working in Node.js app.
|
35
|
+
* [#1769](https://github.com/Shopify/shopify-cli/pull/1769): Fix `theme push --development --json` to output the proper exit code
|
36
|
+
* [#1766](https://github.com/Shopify/shopify-cli/pull/1766): Fix `theme serve` failing with the `--host` property
|
37
|
+
* [#1771](https://github.com/Shopify/shopify-cli/pull/1771): Fix `theme push --development --json` to output errors in the STDERR
|
38
|
+
* [#1778](https://github.com/Shopify/shopify-cli/pull/1778): Fix ngrok installation check on Windows
|
39
|
+
* [#1798](https://github.com/Shopify/shopify-cli/pull/1798): Add `--live` option to the `theme pull` and the `theme push` commands
|
40
|
+
* [#1788](https://github.com/Shopify/shopify-cli/pull/1788): Improve `theme serve` errors and add logs for successful operations
|
41
|
+
* [#1794](https://github.com/Shopify/shopify-cli/pull/1794): Fix bug where hidden subcommands appear in the help menu.
|
42
|
+
|
43
|
+
## Version 2.7.1
|
44
|
+
### Fixed
|
45
|
+
* [#1722](https://github.com/Shopify/shopify-cli/pull/1722): Fix `theme serve` failing when the port is already being used
|
46
|
+
* [#1751](https://github.com/Shopify/shopify-cli/pull/1751): A bug in the app creation flow that caused the CLI to abort when the form validation failed.
|
47
|
+
* [#1750](https://github.com/Shopify/shopify-cli/pull/1750): Runtime errors in Windows' environments when the `PATHEXT` environment variable is not defined.
|
48
|
+
* [#1758](https://github.com/Shopify/shopify-cli/pull/1758): Fix tunnel creation for expired anonymous tunnels
|
49
|
+
|
4
50
|
## Version 2.7.0
|
5
51
|
### Changed
|
6
52
|
* [#1650](https://github.com/Shopify/shopify-cli/pull/1650): **Breaking** Move app commands under `shopify app`.
|
data/Codespace.dockerfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# This is a Docker image to test the CLI in UNIX environments other than macOS
|
2
2
|
# Build the image: docker build . -t shopify-cli
|
3
3
|
# Run tests: docker run -t --rm --volume "$(pwd):/usr/src/app" shopify-cli bundle exec rake test
|
4
|
-
FROM cimg/ruby:2.7.
|
4
|
+
FROM cimg/ruby:2.7.5
|
5
5
|
|
6
6
|
RUN git config --global user.email "development-lifecycle@shopify.com"
|
7
7
|
RUN git config --global user.name "Development Lifecycle"
|
@@ -29,7 +29,7 @@ RUN sudo apt-get install -y nodejs
|
|
29
29
|
RUN sudo npm install --global yarn
|
30
30
|
|
31
31
|
# Python is necessary to compile NPM packages with native extensions through node-gyp
|
32
|
-
RUN sudo apt install
|
32
|
+
RUN sudo apt install python2-minimal -y
|
33
33
|
|
34
34
|
# Install sqlite3
|
35
35
|
RUN sudo apt-get install libsqlite3-dev -y
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
shopify-cli (2.7.
|
4
|
+
shopify-cli (2.7.4)
|
5
5
|
bugsnag (~> 6.22)
|
6
6
|
listen (~> 3.7.0)
|
7
|
-
theme-check (~> 1.
|
7
|
+
theme-check (~> 1.9.0)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
@@ -81,7 +81,7 @@ GEM
|
|
81
81
|
mini_portile2 (~> 2.6.1)
|
82
82
|
racc (~> 1.4)
|
83
83
|
parallel (1.21.0)
|
84
|
-
parser (3.0.
|
84
|
+
parser (3.0.3.1)
|
85
85
|
ast (~> 2.4.1)
|
86
86
|
pry (0.13.1)
|
87
87
|
coderay (~> 1.1)
|
@@ -119,7 +119,7 @@ GEM
|
|
119
119
|
ruby-progressbar (1.11.0)
|
120
120
|
sys-uname (1.2.2)
|
121
121
|
ffi (~> 1.1)
|
122
|
-
theme-check (1.
|
122
|
+
theme-check (1.9.0)
|
123
123
|
liquid (>= 5.1.0)
|
124
124
|
nokogiri (>= 1.12)
|
125
125
|
parser (~> 3)
|
data/Rakefile
CHANGED
@@ -146,6 +146,33 @@ namespace :extensions do
|
|
146
146
|
end
|
147
147
|
end
|
148
148
|
|
149
|
+
namespace :scripts do
|
150
|
+
namespace :javy do
|
151
|
+
task :symlink do
|
152
|
+
source = Paths.root("..", "javy", "target", "release", "javy")
|
153
|
+
error("Unable to find javy executable: #{executable}") unless File.executable?(source)
|
154
|
+
target = Paths.javy("javy")
|
155
|
+
File.delete(target) if File.exist?(target)
|
156
|
+
File.symlink(source, target)
|
157
|
+
end
|
158
|
+
|
159
|
+
task :install do
|
160
|
+
require_relative Paths.javy("javy.rb")
|
161
|
+
Javy.install
|
162
|
+
end
|
163
|
+
|
164
|
+
module Paths
|
165
|
+
def self.javy(*args)
|
166
|
+
root("ext", "javy", *args)
|
167
|
+
end
|
168
|
+
|
169
|
+
def self.root(*args)
|
170
|
+
Pathname(File.dirname(__FILE__)).join(*args).to_s
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
149
176
|
def error(message, output: STDERR, code: 1)
|
150
177
|
output.puts(message)
|
151
178
|
exit(code)
|
data/Tests.dockerfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# This is a Docker image to test the CLI in UNIX environments other than macOS
|
2
2
|
# Build the image: docker build . -t shopify-cli
|
3
3
|
# Run tests: docker run -t --rm --volume "$(pwd):/usr/src/app" shopify-cli bundle exec rake test
|
4
|
-
FROM cimg/ruby:2.7.
|
4
|
+
FROM cimg/ruby:2.7.5
|
5
5
|
|
6
6
|
RUN git config --global user.email "development-lifecycle@shopify.com"
|
7
7
|
RUN git config --global user.name "Development Lifecycle"
|
@@ -29,7 +29,7 @@ RUN sudo apt-get install -y nodejs
|
|
29
29
|
RUN sudo npm install --global yarn
|
30
30
|
|
31
31
|
# Python is necessary to compile NPM packages with native extensions through node-gyp
|
32
|
-
RUN sudo apt install
|
32
|
+
RUN sudo apt install python2-minimal -y
|
33
33
|
|
34
34
|
# Install sqlite3
|
35
35
|
RUN sudo apt-get install libsqlite3-dev -y
|
data/dev.yml
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
16e1a74c06eff6e5be79253a8ee96a08a404e95be3479a6e384c8926bb736e43
|
@@ -0,0 +1 @@
|
|
1
|
+
53cb9d0e8a345d68f91512a28a7d2eab93463dc8650c7a044f03cbee1f7cac05
|
@@ -0,0 +1 @@
|
|
1
|
+
5e1ca88385206a653980139ab969efd80de11fd9b298dafe450d3ac27d6d0173
|
@@ -0,0 +1 @@
|
|
1
|
+
37f9b3f75b4ffca68b06656d6f90abfbac57597ee45fffb59b3a559b6b5de44e
|
data/ext/javy/javy.rb
ADDED
@@ -0,0 +1,204 @@
|
|
1
|
+
require "open-uri"
|
2
|
+
require "zlib"
|
3
|
+
require "open3"
|
4
|
+
require "digest/sha2"
|
5
|
+
|
6
|
+
module Javy
|
7
|
+
ROOT = __dir__
|
8
|
+
BIN_FOLDER = File.join(ROOT, "bin")
|
9
|
+
HASH_FOLDER = File.join(ROOT, "hashes")
|
10
|
+
VERSION = File.read(File.join(ROOT, "version")).strip
|
11
|
+
TARGET = File.join(BIN_FOLDER, "javy-#{VERSION}")
|
12
|
+
|
13
|
+
class << self
|
14
|
+
def install
|
15
|
+
ShopifyCLI::Result
|
16
|
+
.wrap { Installer.call(target: target, platform: platform, version: VERSION) }
|
17
|
+
.call
|
18
|
+
end
|
19
|
+
|
20
|
+
def build(source:, dest: nil)
|
21
|
+
optional_args = []
|
22
|
+
optional_args += ["-o", dest] unless dest.nil?
|
23
|
+
|
24
|
+
ShopifyCLI::Result
|
25
|
+
.wrap { ensure_installed }
|
26
|
+
.call
|
27
|
+
.then { exec(source, *optional_args) }
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def exec(*args, **kwargs)
|
33
|
+
out_and_err, stat = CLI::Kit::System.capture2e(target, *args, **kwargs)
|
34
|
+
raise ExecutionError, out_and_err unless stat.success?
|
35
|
+
true
|
36
|
+
end
|
37
|
+
|
38
|
+
def platform
|
39
|
+
Platform.new
|
40
|
+
end
|
41
|
+
|
42
|
+
def target
|
43
|
+
platform.format_executable_path(TARGET)
|
44
|
+
end
|
45
|
+
|
46
|
+
def ensure_installed
|
47
|
+
delete_outdated_installations
|
48
|
+
install.unwrap { |e| raise e } unless Installer.installed?(target: target)
|
49
|
+
true
|
50
|
+
end
|
51
|
+
|
52
|
+
def delete_outdated_installations
|
53
|
+
installed_binaries
|
54
|
+
.reject { |v| v == target }
|
55
|
+
.each { |file| File.delete(file) }
|
56
|
+
end
|
57
|
+
|
58
|
+
def installed_binaries
|
59
|
+
Dir[File.join(BIN_FOLDER, "javy-*")]
|
60
|
+
end
|
61
|
+
|
62
|
+
module Installer
|
63
|
+
def self.call(target:, platform:, version:)
|
64
|
+
asset = Asset.new(
|
65
|
+
platform: platform,
|
66
|
+
version: version,
|
67
|
+
owner: "Shopify",
|
68
|
+
repository: "javy",
|
69
|
+
basename: "javy"
|
70
|
+
)
|
71
|
+
|
72
|
+
downloaded = asset.download(target: target)
|
73
|
+
raise InstallationError.asset_not_found(platform: platform, version: version, url: asset.url) unless downloaded
|
74
|
+
|
75
|
+
true
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.installed?(target:)
|
79
|
+
File.executable?(target)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
class Error < RuntimeError; end
|
85
|
+
class ExecutionError < Error; end
|
86
|
+
|
87
|
+
class InstallationError < Error
|
88
|
+
def self.cpu_unsupported
|
89
|
+
new("Javy is not supported on this CPU")
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.asset_not_found(platform:, version:, url:)
|
93
|
+
new(format(
|
94
|
+
"Unable to download javy %{version} for %{os} (%{cpu}) at %{url}",
|
95
|
+
version: version,
|
96
|
+
os: platform.os,
|
97
|
+
cpu: platform.cpu,
|
98
|
+
url: url
|
99
|
+
))
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.invalid_binary
|
103
|
+
new("Invalid Javy binary downloaded.")
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
Asset = Struct.new(:platform, :version, :owner, :repository, :basename, keyword_init: true) do
|
108
|
+
def download(target:)
|
109
|
+
FileUtils.mkdir_p(BIN_FOLDER)
|
110
|
+
|
111
|
+
source_file = url.open
|
112
|
+
validate_sha!(source_file)
|
113
|
+
source_file.seek(0)
|
114
|
+
|
115
|
+
Dir.chdir(File.dirname(target)) do
|
116
|
+
File.open(File.basename(target), "wb") do |target_file|
|
117
|
+
decompress(source_file, target_file)
|
118
|
+
end
|
119
|
+
|
120
|
+
File.chmod(0755, target)
|
121
|
+
end
|
122
|
+
|
123
|
+
true
|
124
|
+
rescue OpenURI::HTTPError
|
125
|
+
false
|
126
|
+
end
|
127
|
+
|
128
|
+
def url
|
129
|
+
URI.parse(format(
|
130
|
+
"https://github.com/%{owner}/%{repository}/releases/download/%{version}/%{filename}",
|
131
|
+
owner: owner,
|
132
|
+
repository: repository,
|
133
|
+
version: version,
|
134
|
+
filename: filename
|
135
|
+
))
|
136
|
+
end
|
137
|
+
|
138
|
+
def filename
|
139
|
+
format(
|
140
|
+
"%{basename}-%{cpu}-%{os}-%{version}.gz",
|
141
|
+
basename: basename,
|
142
|
+
cpu: platform.cpu,
|
143
|
+
os: platform.os,
|
144
|
+
version: version
|
145
|
+
)
|
146
|
+
end
|
147
|
+
|
148
|
+
private
|
149
|
+
|
150
|
+
def decompress(source, target)
|
151
|
+
zlib = Zlib::GzipReader.new(source)
|
152
|
+
target << zlib.read
|
153
|
+
ensure
|
154
|
+
zlib.close
|
155
|
+
end
|
156
|
+
|
157
|
+
def validate_sha!(source)
|
158
|
+
generated_hash = Digest::SHA256.hexdigest(source.read).strip
|
159
|
+
expected_hash = File.read(File.join(HASH_FOLDER, "#{filename}.sha256")).strip
|
160
|
+
raise InstallationError.invalid_binary unless generated_hash == expected_hash
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
Platform = Struct.new(:ruby_platform) do
|
165
|
+
def initialize(ruby_platform = RUBY_PLATFORM)
|
166
|
+
super(ruby_platform)
|
167
|
+
end
|
168
|
+
|
169
|
+
def to_s
|
170
|
+
format("%{cpu}-%{os}", cpu: cpu, os: os)
|
171
|
+
end
|
172
|
+
|
173
|
+
def os
|
174
|
+
case ruby_platform
|
175
|
+
when /linux/
|
176
|
+
"linux"
|
177
|
+
when /darwin/
|
178
|
+
"macos"
|
179
|
+
else
|
180
|
+
"windows"
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
def cpu
|
185
|
+
case ruby_platform
|
186
|
+
when /x64/, /x86_64/
|
187
|
+
"x86_64"
|
188
|
+
when /arm/
|
189
|
+
"arm"
|
190
|
+
else
|
191
|
+
raise InstallationError.cpu_unsupported
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def format_executable_path(path)
|
196
|
+
case os
|
197
|
+
when "windows"
|
198
|
+
File.extname(path) != ".exe" ? path + ".exe" : path
|
199
|
+
else
|
200
|
+
path
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
data/ext/javy/version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
v0.1.0
|
@@ -0,0 +1,27 @@
|
|
1
|
+
query GetExtensionRegistrations($api_key: String!, $type: String) {
|
2
|
+
app(apiKey: $api_key) {
|
3
|
+
id
|
4
|
+
title
|
5
|
+
apiKey
|
6
|
+
apiSecretKeys{
|
7
|
+
secret
|
8
|
+
}
|
9
|
+
appType
|
10
|
+
extensionRegistrations(specificationIdentifier: $type) {
|
11
|
+
id
|
12
|
+
type
|
13
|
+
uuid
|
14
|
+
title
|
15
|
+
draftVersion {
|
16
|
+
registrationId
|
17
|
+
context
|
18
|
+
lastUserInteractionAt
|
19
|
+
location
|
20
|
+
validationErrors { field message }
|
21
|
+
id
|
22
|
+
uuid
|
23
|
+
versionTag
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
@@ -13,7 +13,6 @@ module Extension
|
|
13
13
|
end
|
14
14
|
|
15
15
|
class Command < ShopifyCLI::Command::ProjectCommand
|
16
|
-
hidden_feature
|
17
16
|
autoload :ExtensionCommand, Project.project_filepath("commands/extension_command")
|
18
17
|
|
19
18
|
subcommand :Create, "create", Project.project_filepath("commands/create")
|
@@ -41,7 +40,6 @@ module Extension
|
|
41
40
|
autoload :FindNpmPackages, Project.project_filepath("tasks/find_npm_packages")
|
42
41
|
autoload :GetExtensions, Project.project_filepath("tasks/get_extensions")
|
43
42
|
autoload :GetProduct, Project.project_filepath("tasks/get_product")
|
44
|
-
autoload :RunExtensionCommand, Project.project_filepath("tasks/run_extension_command")
|
45
43
|
autoload :MergeServerConfig, Project.project_filepath("tasks/merge_server_config")
|
46
44
|
autoload :FindPackageFromJson, Project.project_filepath("tasks/find_package_from_json.rb")
|
47
45
|
autoload :EnsureResourceUrl, Project.project_filepath("tasks/ensure_resource_url.rb")
|
@@ -53,6 +51,28 @@ module Extension
|
|
53
51
|
autoload :ValidationErrorConverter, Project.project_filepath("tasks/converters/validation_error_converter")
|
54
52
|
autoload :AppConverter, Project.project_filepath("tasks/converters/app_converter")
|
55
53
|
autoload :ProductConverter, Project.project_filepath("tasks/converters/product_converter")
|
54
|
+
autoload :ExecuteCommands, Project.project_filepath("cli/execute_commands")
|
55
|
+
end
|
56
|
+
|
57
|
+
module ExecuteCommands
|
58
|
+
autoload :Base, Project.project_filepath("tasks/execute_commands/base")
|
59
|
+
autoload :Build, Project.project_filepath("tasks/execute_commands/build")
|
60
|
+
autoload :Create, Project.project_filepath("tasks/execute_commands/create")
|
61
|
+
autoload :Serve, Project.project_filepath("tasks/execute_commands/serve")
|
62
|
+
|
63
|
+
class << self
|
64
|
+
def build(*args)
|
65
|
+
Build.new(*args).call
|
66
|
+
end
|
67
|
+
|
68
|
+
def create(*args)
|
69
|
+
Create.new(*args).call
|
70
|
+
end
|
71
|
+
|
72
|
+
def serve(*args)
|
73
|
+
Serve.new(*args).call
|
74
|
+
end
|
75
|
+
end
|
56
76
|
end
|
57
77
|
end
|
58
78
|
|
@@ -121,4 +141,9 @@ module Extension
|
|
121
141
|
autoload :ExtensionProjectKeys, Project.project_filepath("extension_project_keys")
|
122
142
|
autoload :ExtensionProject, Project.project_filepath("extension_project")
|
123
143
|
autoload :Errors, Project.project_filepath("errors")
|
144
|
+
|
145
|
+
module Loaders
|
146
|
+
autoload :Project, Extension::Project.project_filepath("loaders/project")
|
147
|
+
autoload :SpecificationHandler, Extension::Project.project_filepath("loaders/specification_handler")
|
148
|
+
end
|
124
149
|
end
|
@@ -24,20 +24,16 @@ module Extension
|
|
24
24
|
private
|
25
25
|
|
26
26
|
def run_new_flow(project)
|
27
|
-
Tasks::
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
else
|
38
|
-
@ctx.debug(error)
|
39
|
-
@ctx.abort(@ctx.message("build.build_failure_message"))
|
40
|
-
end
|
27
|
+
Tasks::ExecuteCommands
|
28
|
+
.build(
|
29
|
+
context: @ctx,
|
30
|
+
config_file_path: specification_handler.server_config_path,
|
31
|
+
type: project.specification_identifier.downcase
|
32
|
+
)
|
33
|
+
.then { |output| @ctx.puts(output) }
|
34
|
+
.unwrap do |error|
|
35
|
+
raise ShopifyCLI::Abort, error.message unless error.nil?
|
36
|
+
end
|
41
37
|
end
|
42
38
|
|
43
39
|
def run_legacy_flow
|
@@ -3,9 +3,7 @@
|
|
3
3
|
module Extension
|
4
4
|
class Command
|
5
5
|
class Create < ShopifyCLI::Command::SubCommand
|
6
|
-
|
7
|
-
prerequisite_task :ensure_authenticated
|
8
|
-
end
|
6
|
+
prerequisite_task :ensure_authenticated
|
9
7
|
|
10
8
|
options do |parser, flags|
|
11
9
|
parser.on("--name=NAME") { |name| flags[:name] = name }
|
@@ -55,12 +53,11 @@ module Extension
|
|
55
53
|
end
|
56
54
|
|
57
55
|
def use_new_create_flow(form)
|
58
|
-
Tasks::
|
56
|
+
Tasks::ExecuteCommands.create(
|
59
57
|
root_dir: form.directory_name,
|
60
58
|
template: form.template,
|
61
59
|
type: form.type.identifier.downcase,
|
62
|
-
|
63
|
-
).call
|
60
|
+
)
|
64
61
|
@ctx.chdir(form.directory_name)
|
65
62
|
write_env_file(form)
|
66
63
|
rescue => error
|
@@ -3,17 +3,40 @@ require "shopify_cli"
|
|
3
3
|
|
4
4
|
module Extension
|
5
5
|
class Command
|
6
|
-
class Push <
|
6
|
+
class Push < ShopifyCLI::Command::SubCommand
|
7
7
|
prerequisite_task ensure_project_type: :extension
|
8
8
|
|
9
|
+
options do |parser, flags|
|
10
|
+
parser.on("--api-key=API_KEY") { |api_key| flags[:api_key] = api_key.gsub('"', "") }
|
11
|
+
parser.on("--api-secret=API_SECRET") { |api_secret| flags[:api_secret] = api_secret.gsub('"', "") }
|
12
|
+
parser.on("--registration-id=REGISTRATION_ID") do |registration_id|
|
13
|
+
flags[:registration_id] = registration_id.gsub('"', "")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
9
17
|
TIME_DISPLAY_FORMAT = "%B %d, %Y %H:%M:%S %Z"
|
10
18
|
|
11
19
|
def call(args, name)
|
12
|
-
|
20
|
+
project = Extension::Loaders::Project.load(
|
21
|
+
context: @ctx,
|
22
|
+
directory: Dir.pwd,
|
23
|
+
api_key: options.flags[:api_key],
|
24
|
+
api_secret: options.flags[:api_secret],
|
25
|
+
registration_id: options.flags[:registration_id]
|
26
|
+
)
|
27
|
+
specification_handler = Extension::Loaders::SpecificationHandler.load(project: project, context: @ctx)
|
28
|
+
register_if_necessary(project: project, args: args, name: name)
|
29
|
+
|
13
30
|
Command::Build.new(@ctx).call(args, name) unless specification_handler.specification.options[:skip_build]
|
14
31
|
CLI::UI::Frame.open(@ctx.message("push.frame_title")) do
|
15
|
-
updated_draft_version = update_draft
|
16
|
-
show_message(updated_draft_version)
|
32
|
+
updated_draft_version = update_draft(project: project, specification_handler: specification_handler)
|
33
|
+
show_message(updated_draft_version, project: project)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def register_if_necessary(project:, args:, name:)
|
38
|
+
if @ctx.tty? && !project.registered?
|
39
|
+
Command::Register.new(@ctx).call(args, name)
|
17
40
|
end
|
18
41
|
end
|
19
42
|
|
@@ -23,11 +46,16 @@ module Extension
|
|
23
46
|
|
24
47
|
private
|
25
48
|
|
26
|
-
def show_message(draft)
|
27
|
-
draft.validation_errors.empty?
|
49
|
+
def show_message(draft, project:)
|
50
|
+
if draft.validation_errors.empty?
|
51
|
+
output_success_messages(draft,
|
52
|
+
project: project)
|
53
|
+
else
|
54
|
+
output_validation_errors(draft)
|
55
|
+
end
|
28
56
|
end
|
29
57
|
|
30
|
-
def output_success_messages(draft)
|
58
|
+
def output_success_messages(draft, project:)
|
31
59
|
@ctx.puts(@ctx.message("push.success_confirmation", project.title, format_time(draft.last_user_interaction_at)))
|
32
60
|
@ctx.puts(@ctx.message("push.success_info", draft.location))
|
33
61
|
end
|
@@ -51,7 +79,7 @@ module Extension
|
|
51
79
|
yield
|
52
80
|
end
|
53
81
|
|
54
|
-
def update_draft
|
82
|
+
def update_draft(project:, specification_handler:)
|
55
83
|
with_waiting_text do
|
56
84
|
Tasks::UpdateDraft.call(
|
57
85
|
context: @ctx,
|