shopify-cli 2.15.0 → 2.15.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e5861ffd7a22ca4048791e4993469dff421162159c7dabbf06b413522297c4a8
4
- data.tar.gz: b5593ee5d6cfbf5c9b616b050263eb825d2d7a9846f5bf71953b4d7f708ee06e
3
+ metadata.gz: 141760dcf4bd3da2b9e92a238c72ee4612fc9e72ce4f522db84f190028439175
4
+ data.tar.gz: f16bc2db60656219f7f1484ce455380822fb7d7da4c65faeceeaf065953076c9
5
5
  SHA512:
6
- metadata.gz: 8cf0ff62f5bf1687d5d98f4d808bf9f7d0bb921322483a5e446e34ef6638ff5a67a5ae15b3e34916a9c4fe627f4aee581f8630d4182925928eb67a762624c103
7
- data.tar.gz: 161eba94f7e0fd3ca350a162eef9706c8f5a76da972eb4b3cbefdc2f9f3fdc8a37a72b7a48f47d81e1860dca4367eb8c2ceae6fe1bd57d4a9a61c7df3ecd0209
6
+ metadata.gz: 1df93436fa11a84a2df90f354a59277fbf29bd2445b097da8c2ddd6d727dc9d2d4792602de476f3479329e58873dfd222ea185fd096271896bd4ee8533f5b242
7
+ data.tar.gz: ada360c3f4529d52a0315c70b1c4fea63ad69f0da1ca7aab384958adb8bf342003d4c4dced65ddc4984e5732fb5e2604f77ba82702908242b1d1427570362626
@@ -8,6 +8,7 @@ name: Mark stale issues and pull requests
8
8
  on:
9
9
  schedule:
10
10
  - cron: '31 3 * * *' # randomly chosen time of day
11
+ workflow_dispatch:
11
12
 
12
13
  jobs:
13
14
  stale:
@@ -18,7 +19,7 @@ jobs:
18
19
  pull-requests: write
19
20
 
20
21
  steps:
21
- - uses: actions/stale@v3
22
+ - uses: actions/stale@v4
22
23
  with:
23
24
  repo-token: ${{ secrets.GITHUB_TOKEN }}
24
25
  days-before-issue-stale: 90
@@ -38,4 +39,8 @@ jobs:
38
39
  Thanks for helping to improve Shopify's dev tooling and experience.
39
40
  stale-issue-label: 'no-issue-activity'
40
41
  stale-pr-label: 'no-pr-activity'
41
- operations-per-run: 10 # temporary so we can ease into staling and see what happens
42
+ ascending: true
43
+ # The math seems a bit fuzzy, but this should amount to a max of 50 issues daily.
44
+ # But then the same issues get checked first so we don't end up progressing too quickly until we can close what we started.
45
+ # Hopefully https://github.com/actions/stale/issues/692 will be closed and fix some of this mess.
46
+ operations-per-run: 200
data/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@ From version 2.6.0, the sections in this file adhere to the [keep a changelog](h
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## Version 2.15.1
6
+
7
+ ### Added
8
+ * [#1934](https://github.com/Shopify/shopify-cli/pull/1934): Block directories in theme assets
9
+ * [#1880](https://github.com/Shopify/shopify-cli/pull/1880): Recognize attempts to pass a store name and suggest correction
10
+
11
+ ### Fixed
12
+ * [#1874](https://github.com/Shopify/shopify-cli/pull/1874): Make ngrok errors more robust and helpful
13
+ * [#2172](https://github.com/Shopify/shopify-cli/pull/2172): Fix Ruby check for Rails app creation
14
+
5
15
  ## Version 2.15.0
6
16
 
7
17
  ### Fixed
data/Gemfile CHANGED
@@ -15,6 +15,7 @@ group :development, :test do
15
15
  gem "rubocop-rake", require: false
16
16
  gem "iniparse", "~> 1.5"
17
17
  gem "colorize", "~> 0.8.1"
18
+ gem "octokit", "~> 4.0"
18
19
  end
19
20
 
20
21
  group :test do
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- shopify-cli (2.15.0)
4
+ shopify-cli (2.15.1)
5
5
  bugsnag (~> 6.22)
6
6
  listen (~> 3.7.0)
7
7
  theme-check (~> 1.10.1)
@@ -13,13 +13,13 @@ GEM
13
13
  public_suffix (>= 2.0.2, < 5.0)
14
14
  ansi (1.5.0)
15
15
  ast (2.4.2)
16
- bugsnag (6.23.0)
16
+ bugsnag (6.24.2)
17
17
  concurrent-ruby (~> 1.0)
18
18
  builder (3.2.4)
19
19
  byebug (11.1.3)
20
20
  coderay (1.1.3)
21
21
  colorize (0.8.1)
22
- concurrent-ruby (1.1.9)
22
+ concurrent-ruby (1.1.10)
23
23
  crack (0.4.5)
24
24
  rexml
25
25
  cucumber (7.0.0)
@@ -55,11 +55,34 @@ GEM
55
55
  cucumber-messages (~> 17.0, >= 17.0.1)
56
56
  diff-lcs (1.4.4)
57
57
  fakefs (1.3.2)
58
+ faraday (1.10.0)
59
+ faraday-em_http (~> 1.0)
60
+ faraday-em_synchrony (~> 1.0)
61
+ faraday-excon (~> 1.1)
62
+ faraday-httpclient (~> 1.0)
63
+ faraday-multipart (~> 1.0)
64
+ faraday-net_http (~> 1.0)
65
+ faraday-net_http_persistent (~> 1.0)
66
+ faraday-patron (~> 1.0)
67
+ faraday-rack (~> 1.0)
68
+ faraday-retry (~> 1.0)
69
+ ruby2_keywords (>= 0.0.4)
70
+ faraday-em_http (1.0.0)
71
+ faraday-em_synchrony (1.0.0)
72
+ faraday-excon (1.1.0)
73
+ faraday-httpclient (1.0.1)
74
+ faraday-multipart (1.0.3)
75
+ multipart-post (>= 1.2, < 3)
76
+ faraday-net_http (1.0.1)
77
+ faraday-net_http_persistent (1.2.0)
78
+ faraday-patron (1.0.0)
79
+ faraday-rack (1.0.0)
80
+ faraday-retry (1.0.3)
58
81
  ffi (1.15.4)
59
82
  hashdiff (1.0.1)
60
83
  iniparse (1.5.0)
61
- liquid (5.1.0)
62
- listen (3.7.0)
84
+ liquid (5.3.0)
85
+ listen (3.7.1)
63
86
  rb-fsevent (~> 0.10, >= 0.10.3)
64
87
  rb-inotify (~> 0.9, >= 0.9.10)
65
88
  method_source (1.0.0)
@@ -77,9 +100,13 @@ GEM
77
100
  ruby-progressbar
78
101
  mocha (1.13.0)
79
102
  multi_test (0.1.2)
103
+ multipart-post (2.1.1)
80
104
  nokogiri (1.13.3)
81
105
  mini_portile2 (~> 2.8.0)
82
106
  racc (~> 1.4)
107
+ octokit (4.22.0)
108
+ faraday (>= 0.9)
109
+ sawyer (~> 0.8.0, >= 0.5.3)
83
110
  parallel (1.21.0)
84
111
  parser (3.1.1.0)
85
112
  ast (~> 2.4.1)
@@ -94,7 +121,7 @@ GEM
94
121
  rack (2.2.3)
95
122
  rainbow (3.1.1)
96
123
  rake (13.0.6)
97
- rb-fsevent (0.11.0)
124
+ rb-fsevent (0.11.1)
98
125
  rb-inotify (0.10.1)
99
126
  ffi (~> 1.0)
100
127
  regexp_parser (2.2.0)
@@ -117,9 +144,13 @@ GEM
117
144
  rubocop-shopify (2.0.1)
118
145
  rubocop (~> 1.11)
119
146
  ruby-progressbar (1.11.0)
147
+ ruby2_keywords (0.0.5)
148
+ sawyer (0.8.2)
149
+ addressable (>= 2.3.5)
150
+ faraday (> 0.8, < 2.0)
120
151
  sys-uname (1.2.2)
121
152
  ffi (~> 1.1)
122
- theme-check (1.10.1)
153
+ theme-check (1.10.2)
123
154
  liquid (>= 5.1.0)
124
155
  nokogiri (>= 1.12)
125
156
  parser (~> 3)
@@ -144,6 +175,7 @@ DEPENDENCIES
144
175
  minitest-fail-fast
145
176
  minitest-reporters
146
177
  mocha
178
+ octokit (~> 4.0)
147
179
  pry-byebug
148
180
  rack
149
181
  rake
data/Rakefile CHANGED
@@ -129,6 +129,33 @@ end
129
129
  desc("Builds all distribution packages of the CLI")
130
130
  task(package: "package:all")
131
131
 
132
+ namespace :release do
133
+ require "shopify_cli/release"
134
+
135
+ task :prepare, [:new_version] do |_t, args|
136
+ new_version = args[:new_version]
137
+ unless new_version
138
+ raise <<~NO_NEW_VERSION
139
+ New version must be provided, e.g.:
140
+
141
+ $ GITHUB_ACCESS_TOKEN=abcdef rake "release:prepare[1.2.3]"
142
+
143
+ NO_NEW_VERSION
144
+ end
145
+ github_access_token = ENV["GITHUB_ACCESS_TOKEN"]
146
+ unless github_access_token
147
+ raise <<~NO_GITHUB_ACCESS_TOKEN
148
+ GitHub access token must be provided, e.g.:
149
+
150
+ $ GITHUB_ACCESS_TOKEN=abcdef rake "release:prepare[1.2.3]"
151
+ NO_GITHUB_ACCESS_TOKEN
152
+ end
153
+
154
+ ShopifyCLI::Release.new(new_version, github_access_token).prepare!
155
+ puts "Completed!"
156
+ end
157
+ end
158
+
132
159
  namespace :extensions do
133
160
  task :update do
134
161
  version = ENV.fetch("VERSION").strip
@@ -1 +1 @@
1
- v0.1.0
1
+ v0.2.0
@@ -11,21 +11,18 @@ module Extension
11
11
  default: -> { CLI::UI::Prompt.method(:ask) }
12
12
 
13
13
  def call(project_details)
14
- return project_details unless template_required?(project_details)
15
- project_details.template = template || choose_interactively
14
+ if template_required?(project_details)
15
+ project_details.template = template || choose_interactively
16
+ end
16
17
  project_details
17
18
  end
18
19
 
19
20
  private
20
21
 
21
22
  def template_required?(project_details)
22
- return false unless extension_server_beta?
23
23
  type = project_details&.type&.identifier
24
- Models::DevelopmentServerRequirements::SUPPORTED_EXTENSION_TYPES.include?(type.downcase)
25
- end
26
-
27
- def extension_server_beta?
28
- ShopifyCLI::Shopifolk.check && ShopifyCLI::Feature.enabled?(:extension_server_beta)
24
+ (Models::DevelopmentServerRequirements.beta_enabled? &&
25
+ Models::DevelopmentServerRequirements.type_supported?(type.downcase))
29
26
  end
30
27
 
31
28
  def choose_interactively
@@ -115,6 +115,16 @@ module Extension
115
115
  tunnel_already_running: "A tunnel running on another port has been detected. Close the tunnel and try again.",
116
116
  },
117
117
  tunnel: {
118
+ duplicate_session: <<~MESSAGE,
119
+ Another ngrok tunnel is currently running with your auth token, possibly on another machine.
120
+
121
+ Terminate that tunnel before opening a new one.
122
+ MESSAGE
123
+ invalid_token: <<~MESSAGE,
124
+ The ngrok token currently configured is invalid.
125
+
126
+ After generating a new token, update your local ngrok configuration using {{command:shopify app tunnel auth <token>}}
127
+ MESSAGE
118
128
  missing_token: "{{x}} {{red:auth requires a token argument}}. "\
119
129
  "Find it on your ngrok dashboard: {{underline:https://dashboard.ngrok.com/auth/your-authtoken}}.",
120
130
  invalid_port: "%s is not a valid port.",
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "shopify_cli"
3
4
 
4
5
  module Extension
@@ -12,21 +13,26 @@ module Extension
12
13
 
13
14
  class << self
14
15
  def supported?(type)
15
- binary_installed? && type_supported?(type) && beta_enabled?
16
+ binary_installed? && type_supported?(type) && type_enabled?(type)
16
17
  end
17
18
 
18
- private
19
-
20
- def binary_installed?
21
- Models::DevelopmentServer.new.executable_installed?
19
+ def beta_enabled?
20
+ ShopifyCLI::Feature.enabled?(:extension_server_beta)
22
21
  end
23
22
 
24
23
  def type_supported?(type)
25
24
  SUPPORTED_EXTENSION_TYPES.include?(type.downcase)
26
25
  end
27
26
 
28
- def beta_enabled?
29
- ShopifyCLI::Shopifolk.check && ShopifyCLI::Feature.enabled?(:extension_server_beta)
27
+ private
28
+
29
+ def binary_installed?
30
+ Models::DevelopmentServer.new.executable_installed?
31
+ end
32
+
33
+ # Some types are enabled unconditionally; others require beta_enabled
34
+ def type_enabled?(type)
35
+ beta_enabled? || "checkout_ui_extension" == type.downcase
30
36
  end
31
37
  end
32
38
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "yaml"
4
+
3
5
  module Extension
4
6
  module Models
5
7
  module ServerConfig
@@ -36,3 +36,21 @@ delivery_discount_types:
36
36
  repo: "https://github.com/Shopify/scripts-apis-examples"
37
37
  wasm:
38
38
  repo: "https://github.com/Shopify/scripts-apis-examples"
39
+ product_discount_type:
40
+ beta: true
41
+ domain: 'discounts'
42
+ libraries:
43
+ wasm:
44
+ repo: "https://github.com/Shopify/scripts-apis-examples"
45
+ order_discount_type:
46
+ beta: true
47
+ domain: 'discounts'
48
+ libraries:
49
+ wasm:
50
+ repo: "https://github.com/Shopify/scripts-apis-examples"
51
+ shipping_discount_type:
52
+ beta: true
53
+ domain: 'discounts'
54
+ libraries:
55
+ wasm:
56
+ repo: "https://github.com/Shopify/scripts-apis-examples"
@@ -124,6 +124,13 @@ module Theme
124
124
  error: {
125
125
  address_binding_error: "Couldn't bind to localhost."\
126
126
  " To serve your theme, set a different address with {{command:%s theme serve --host=<address>}}",
127
+ invalid_subdirectory: <<~MESSAGE,
128
+ The presence of %s in the directory structure isn't supported.
129
+
130
+ Move any files to a parent folder, then delete unsupported subdirectories.
131
+
132
+ • Required directory structure: https://shopify.dev/themes/architecture#directory-structure-and-component-types
133
+ MESSAGE
127
134
  },
128
135
  serving: <<~SERVING,
129
136
 
@@ -0,0 +1,76 @@
1
+ require "shopify_cli/sed"
2
+
3
+ module ShopifyCLI
4
+ class Changelog
5
+ CHANGELOG_FILE = File.join(ShopifyCLI::ROOT, "CHANGELOG.md")
6
+
7
+ def initialize
8
+ load(File.read(CHANGELOG_FILE))
9
+ end
10
+
11
+ def update_version!(new_version)
12
+ Sed.new.replace_inline(
13
+ CHANGELOG_FILE,
14
+ "## \\[Unreleased\\]",
15
+ "## [Unreleased]\\n\\n## Version #{new_version}"
16
+ )
17
+ end
18
+
19
+ def release_notes(version)
20
+ changes[version].map do |change_category, changes|
21
+ <<~CHANGES
22
+ ### #{change_category}
23
+ #{changes.map { |change| entry(**change) }.join("\n")}
24
+ CHANGES
25
+ end.join("\n")
26
+ end
27
+
28
+ def entry(pr_id:, desc:)
29
+ "* [##{pr_id}](https://github.com/Shopify/shopify-cli/pull/#{pr_id}): #{desc}"
30
+ end
31
+
32
+ private
33
+
34
+ def changes
35
+ @changes ||= Hash.new do |h, k|
36
+ h[k] = Hash.new do |h2, k2|
37
+ h2[k2] = []
38
+ end
39
+ end
40
+ end
41
+
42
+ def load(log)
43
+ state = :initial
44
+ change_category = nil
45
+ current_version = nil
46
+ @remainder = ""
47
+ log.each_line do |line|
48
+ case state
49
+ when :initial
50
+ next unless line.chomp == "\#\# [Unreleased]"
51
+ state = :unreleased
52
+ current_version = "Unreleased"
53
+ when :unreleased, :last_version
54
+ if /\A\#\#\# (?<category>\w+)/ =~ line
55
+ change_category = category
56
+ elsif %r{\A\* \[\#(?<pr_id>\d+)\]\(https://github.com/Shopify/shopify-cli/pull/\d+\): (?<desc>.+)\n} =~ line
57
+ changes[current_version][change_category] << { pr_id: pr_id, desc: desc }
58
+ elsif /\A\#\# Version (?<version>\d+\.\d+\.\d+)/ =~ line
59
+ current_version = version
60
+ state =
61
+ case state
62
+ when :unreleased
63
+ :last_version
64
+ else
65
+ :finished
66
+ end
67
+ elsif !line.match?(/\s*\n/)
68
+ raise "Unrecognized line: #{line.inspect}"
69
+ end
70
+ when :finished
71
+ @remainder << line
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -36,6 +36,13 @@ module ShopifyCLI
36
36
  end
37
37
  rescue OptionParser::InvalidOption => error
38
38
  arg = error.args.first
39
+ store_name = arg.match(/\A--(?<store_name>.*\.myshopify\.com)\z/)&.[](:store_name)
40
+ if store_name && !arg.match?(/\A--(store|shop)=/)
41
+ # Sometimes it may look like --invalidoption=https://storename.myshopify.com
42
+ store_name = store_name.sub(%r{\A(.*=)?(https?://)?}, "")
43
+ raise ShopifyCLI::Abort,
44
+ @ctx.message("core.errors.option_parser.invalid_option_store_equals", arg, store_name)
45
+ end
39
46
  raise ShopifyCLI::Abort, @ctx.message("core.errors.option_parser.invalid_option", arg)
40
47
  rescue OptionParser::MissingArgument => error
41
48
  arg = error.args.first
@@ -20,6 +20,12 @@ module ShopifyCLI
20
20
  missing_ruby: "Ruby is required to continue. Install Ruby here: https://www.ruby-lang.org/en/downloads.",
21
21
  option_parser: {
22
22
  invalid_option: "The option {{command:%s}} is not supported.",
23
+ invalid_option_store_equals: <<~MESSAGE,
24
+ The option {{command:%s}} isn't recognized.
25
+
26
+ Try this:
27
+ {{command:--store=%s}}.
28
+ MESSAGE
23
29
  missing_argument: "The required argument {{command:%s}} is missing.",
24
30
  },
25
31
  },
@@ -0,0 +1,94 @@
1
+ require "shopify_cli/sed"
2
+ require "shopify_cli/changelog"
3
+ require "octokit"
4
+
5
+ module ShopifyCLI
6
+ class Release
7
+ def initialize(new_version, github_access_token)
8
+ @new_version = new_version
9
+ @changelog = ShopifyCLI::Changelog.new
10
+ @github = Octokit::Client.new(access_token: github_access_token)
11
+ end
12
+
13
+ def prepare!
14
+ ensure_updated_main
15
+ create_release_branch
16
+ update_changelog
17
+ update_versions_in_files
18
+ commit
19
+ pr = create_pr
20
+ system("open #{pr["html_url"]}")
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :new_version, :changelog, :github
26
+
27
+ def ensure_updated_main
28
+ current_branch = %x(git branch --show-current)
29
+ unless current_branch == "main"
30
+ raise "Must be on the main branch to package a release!"
31
+ end
32
+ unless system("git pull")
33
+ raise "git pull failed, cannot be sure there aren't new commits!"
34
+ end
35
+ end
36
+
37
+ def create_release_branch
38
+ puts "Checking out release branch"
39
+ unless system("git checkout -b #{release_branch_name}")
40
+ puts "Cannot check out release branch!"
41
+ end
42
+ end
43
+
44
+ def update_changelog
45
+ if release_notes.empty?
46
+ puts "No unreleased CHANGELOG updates found!"
47
+ else
48
+ puts "Updating CHANGELOG"
49
+ changelog.update_version!(new_version)
50
+ end
51
+ end
52
+
53
+ def update_versions_in_files
54
+ version_file = File.join(ShopifyCLI::ROOT, "lib/shopify_cli/version.rb")
55
+ puts "Updating version.rb"
56
+ ShopifyCLI::Sed.new.replace_inline(version_file, ShopifyCLI::VERSION, new_version)
57
+ gemfile_lock = File.join(ShopifyCLI::ROOT, "Gemfile.lock")
58
+ puts "Updating Gemfile.lock"
59
+ ShopifyCLI::Sed.new.replace_inline(
60
+ gemfile_lock,
61
+ "shopify-cli (#{ShopifyCLI::VERSION})",
62
+ "shopify-cli (#{new_version})",
63
+ )
64
+ end
65
+
66
+ def commit
67
+ puts "Committing"
68
+ unless system("git commit -am 'Packaging for release v#{new_version}'")
69
+ puts "Commit failed!"
70
+ end
71
+ unless system("git push -u origin #{release_branch_name}")
72
+ puts "Failed to push branch!"
73
+ end
74
+ end
75
+
76
+ def create_pr
77
+ github.create_pull_request(
78
+ "Shopify/shopify-cli",
79
+ "main",
80
+ release_branch_name,
81
+ "Packaging for release v#{new_version}",
82
+ release_notes
83
+ ).tap { |results| puts "Created PR ##{results["number"]}" }
84
+ end
85
+
86
+ def release_branch_name
87
+ @release_branch_name ||= "release_#{new_version.split(".").join("_")}"
88
+ end
89
+
90
+ def release_notes
91
+ @release_notes ||= changelog.release_notes("Unreleased")
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,19 @@
1
+ module ShopifyCLI
2
+ class Sed
3
+ class SedError < StandardError; end
4
+
5
+ def replace_inline(filename, pattern, output)
6
+ command =
7
+ case CLI::Kit::System.os
8
+ when :mac
9
+ "sed -i ''"
10
+ when :linux
11
+ "sed -i"
12
+ else
13
+ raise "Unrecognized system!"
14
+ end
15
+ success = system("#{command} 's/#{pattern}/#{output}/' #{filename}")
16
+ raise SedError unless success
17
+ end
18
+ end
19
+ end
@@ -108,7 +108,7 @@ module ShopifyCLI
108
108
  end
109
109
 
110
110
  def check_ruby
111
- ruby_version = Environment.ruby_version(context)
111
+ ruby_version = Environment.ruby_version(context: context)
112
112
  return if ruby_version.satisfies?("~>2.5") || ruby_version.satisfies?("~>3.1.0")
113
113
  context.abort(context.message("core.app.create.rails.error.invalid_ruby_version"))
114
114
  end
@@ -21,11 +21,11 @@ module ShopifyCLI
21
21
  end
22
22
 
23
23
  def theme_files
24
- glob(["**/*.liquid", "**/*.json", "assets/*"]).uniq
24
+ (glob(["**/*.liquid", "**/*.json"]) + static_asset_files).uniq
25
25
  end
26
26
 
27
27
  def static_asset_files
28
- glob("assets/*").reject(&:liquid?)
28
+ glob("assets/*", raise_on_dir: true).reject(&:liquid?)
29
29
  end
30
30
 
31
31
  def liquid_files
@@ -36,8 +36,11 @@ module ShopifyCLI
36
36
  glob("**/*.json")
37
37
  end
38
38
 
39
- def glob(pattern)
40
- root.glob(pattern).map { |path| File.new(path, root) }
39
+ def glob(pattern, raise_on_dir: false)
40
+ root.glob(pattern).map do |path|
41
+ abort_if_directory!(path) if raise_on_dir
42
+ File.new(path, root)
43
+ end
41
44
  end
42
45
 
43
46
  def theme_file?(file)
@@ -218,6 +221,11 @@ module ShopifyCLI
218
221
 
219
222
  self
220
223
  end
224
+
225
+ def abort_if_directory!(path)
226
+ return unless ::File.directory?(path)
227
+ @ctx.abort(@ctx.message("theme.serve.error.invalid_subdirectory", path.to_s))
228
+ end
221
229
  end
222
230
  end
223
231
  end
@@ -178,6 +178,15 @@ module ShopifyCLI
178
178
 
179
179
  def fetch_url(ctx, log_path)
180
180
  LogParser.new(log_path)
181
+ rescue NgrokError => e
182
+ # Full error messages/descriptions: https://ngrok.com/docs/errors
183
+ case e.message
184
+ when /ERR_NGROK_107/
185
+ ctx.abort(ctx.message("tunnel.invalid_token", e.message))
186
+ when /ERR_NGROK_108/
187
+ ctx.abort(ctx.message("tunnel.duplicate_session", e.message))
188
+ end
189
+ raise e.class, e.message
181
190
  rescue RuntimeError => e
182
191
  stop(ctx)
183
192
  raise e.class, e.message
@@ -1,3 +1,3 @@
1
1
  module ShopifyCLI
2
- VERSION = "2.15.0"
2
+ VERSION = "2.15.1"
3
3
  end
data/shopify-cli.gemspec CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
29
29
  %x(git ls-files -z).split("\x0").reject do |f|
30
30
  f.match(%r{^(test|spec|features|packaging)/}) ||
31
- f.match(%r{^bin/(update-deps|shopify.bat)$})
31
+ f.match(%r{^bin/(update-deps|shopify.bat)$})
32
32
  end
33
33
  end
34
34
  spec.bindir = "bin"
@@ -49,4 +49,6 @@ Gem::Specification.new do |spec|
49
49
  # Both shopify-cli and theme-check gems are owned and developed by Shopify.
50
50
  # These gems are currently being actively developed and it's easiest to update them together.
51
51
  spec.add_dependency("theme-check", "~> 1.10.1")
52
+
53
+ spec.extensions = ["ext/shopify-extensions/extconf.rb"]
52
54
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shopify-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.15.0
4
+ version: 2.15.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-22 00:00:00.000000000 Z
11
+ date: 2022-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -109,7 +109,8 @@ email:
109
109
  - dev-tools-education@shopify.com
110
110
  executables:
111
111
  - shopify
112
- extensions: []
112
+ extensions:
113
+ - ext/shopify-extensions/extconf.rb
113
114
  extra_rdoc_files: []
114
115
  files:
115
116
  - ".devcontainer.json"
@@ -369,6 +370,7 @@ files:
369
370
  - lib/shopify_cli/admin_api/schema.rb
370
371
  - lib/shopify_cli/api.rb
371
372
  - lib/shopify_cli/app_type_detector.rb
373
+ - lib/shopify_cli/changelog.rb
372
374
  - lib/shopify_cli/command.rb
373
375
  - lib/shopify_cli/command/app_sub_command.rb
374
376
  - lib/shopify_cli/command/project_command.rb
@@ -444,11 +446,13 @@ files:
444
446
  - lib/shopify_cli/project.rb
445
447
  - lib/shopify_cli/project_commands.rb
446
448
  - lib/shopify_cli/project_type.rb
449
+ - lib/shopify_cli/release.rb
447
450
  - lib/shopify_cli/reporting_configuration_controller.rb
448
451
  - lib/shopify_cli/resolve_constant.rb
449
452
  - lib/shopify_cli/resources.rb
450
453
  - lib/shopify_cli/resources/env_file.rb
451
454
  - lib/shopify_cli/result.rb
455
+ - lib/shopify_cli/sed.rb
452
456
  - lib/shopify_cli/services.rb
453
457
  - lib/shopify_cli/services/app/connect_service.rb
454
458
  - lib/shopify_cli/services/app/create/node_service.rb