Skip to content

Commit

Permalink
feat: support bun as a package manager
Browse files Browse the repository at this point in the history
  • Loading branch information
G-Rath committed Sep 15, 2023
1 parent 576e4ab commit 1db6b60
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 4 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ jobs:
installer: yarn
- name: pnpm
installer: pnpm
- name: bun
installer: bun
variant:
- name: defaults
config_path: "ackama_rails_template.config.yml"
Expand Down
2 changes: 1 addition & 1 deletion ci/bin/create-fake-js-package-managers
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ elsif system("direnv --version > /dev/null 2>&1")
system("direnv allow")
end

managers = %w[npm yarn pnpm]
managers = %w[npm yarn pnpm bun]
manager_in_use = ARGV[0] || ""

if manager_in_use.empty?
Expand Down
17 changes: 15 additions & 2 deletions template.rb
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def puts_header(msg)
def require_package_json_gem
require "bundler/inline"

gemfile { gem "package_json", github: "G-Rath/package_json" }
gemfile { gem "package_json", github: "G-Rath/package_json", branch: "add-bun-support" }

puts "using package_json v#{PackageJson::VERSION}"
end
Expand Down Expand Up @@ -251,6 +251,16 @@ def setup_yarn_berry
File.unlink("package.json")
end

# Bun uses a binary-based lockfile which cannot be parsed by shakapacker or
# osv-detector, so we want to configure bun to always write a yarn.lock
# in addition so that such tools can check it
def setup_bun
File.write("bunfig.toml", <<~TOML)
[install.lockfile]
print = "yarn"
TOML
end

def add_yarn_package_extension_dependency(name, dependency)
return unless File.exist?(".yarnrc.yml")

Expand All @@ -267,7 +277,10 @@ def add_yarn_package_extension_dependency(name, dependency)
end

def package_json
setup_yarn_berry if @package_json.nil? && ENV.fetch("PACKAGE_JSON_FALLBACK_MANAGER", nil) == "yarn_berry"
if @package_json.nil?
setup_yarn_berry if ENV.fetch("PACKAGE_JSON_FALLBACK_MANAGER", nil) == "yarn_berry"
setup_bun if ENV.fetch("PACKAGE_JSON_FALLBACK_MANAGER", nil) == "bun"
end

@package_json ||= PackageJson.new
end
Expand Down
2 changes: 1 addition & 1 deletion variants/backend-base/Gemfile.tt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ gem 'dotenv-rails', require: "dotenv/rails-now"
gem "bootsnap", require: false

gem "shakapacker", github: "G-Rath/shakapacker", branch: "use-package_json"
gem "package_json", github: "G-Rath/package_json"
gem "package_json", github: "G-Rath/package_json", branch: "add-bun-support"
gem "lograge"
gem "okcomputer"
gem "sentry-ruby"
Expand Down

0 comments on commit 1db6b60

Please sign in to comment.