shopify-cli 2.7.0 → 2.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,
|