···14141515### Removed
16161717+## [0.7.2] - 2025-08-13
1818+1919+### Added
2020+2121+* ci: Add Ubuntu 24.04 LTS to CI
2222+2323+### Changed
2424+2525+* macOS: replace `launchdns` with `dnsmasq` for `*.localhost` TLD resolution for
2626+ bootstrapped web projects
2727+2828+ `launchdns` has been removed from Homebrew after the upstream project was
2929+ archived, so it is no longer installable. `dnsmasq` is a mostly drop-in
3030+ replacement
3131+3232+### Bugfixes
3333+3434+* Fixed install of Docker Desktop on macOS via Homebrew
3535+3636+### Removed
3737+1738## [0.7.1] - 2025-02-06
18391940### Added
···5959 end
6060 end
6161 end
6262-6363- describe "launchdns", :if => os[:family] == 'darwin' do
6464- describe service('homebrew.mxcl.launchdns') do
6565- it { is_expected.to be_enabled }
6666- end
6767- end
6862end
+4
src/mstrap/bootstrappers/web_bootstrapper.cr
···7788 def initialize(@config : Configuration)
99 super
1010+ @dnsmasq = DNSMasq.new
1011 @mkcert = Mkcert.new
1112 end
12131314 # Executes the bootstrapper
1415 def bootstrap(project : Project) : Bool
1516 logd "'#{project.name}' is a web project. Running web bootstrapper."
1717+1818+ dnsmasq.install! unless dnsmasq.installed?
16191720 if mkcert.installed?
1821 Dir.cd(Paths::PROJECT_CERTS) do
···2730 true
2831 end
29323333+ private getter :dnsmasq
3034 private getter :mkcert
3135 end
3236 end
+10
src/mstrap/platform.cr
···117117 platform.install_packages!([package_name])
118118 end
119119120120+ # Uninstall a list of packages using the platform's package manager
121121+ def self.uninstall_packages!(packages : Array(String))
122122+ platform.uninstall_packages!(packages)
123123+ end
124124+125125+ # Uninstall a single package using the platform's package manager
126126+ def self.uninstall_package!(package_name : String)
127127+ platform.uninstall_packages!([package_name])
128128+ end
129129+120130 # Install a single package using the platform's package manager
121131 def self.package_installed?(package_name : String)
122132 platform.package_installed?(package_name)
+4
src/mstrap/platform/darwin/macos.cr
···3333 cmd("brew", ["install"] + packages)
3434 end
35353636+ def self.uninstall_packages!(packages : Array(String))
3737+ cmd("brew", ["uninstall"] + packages)
3838+ end
3939+3640 def self.package_installed?(package_name : String)
3741 cmd("brew list | grep -q '^#{package_name}$'", quiet: true)
3842 end