|
| 1 | +class OnepasswordCli < Formula |
| 2 | + desc '1Password CLI - command-line access to 1Password' |
| 3 | + homepage 'https://developer.1password.com/docs/cli/' |
| 4 | + url 'https://github.com/nsheaps/brew-meta-formula/archive/refs/tags/v1.0.0.tar.gz' |
| 5 | + sha256 'b14702dd54ea5c48d2ebeb6425015c14794159a6b9d342178c81d2f2e79ed2db' |
| 6 | + version '1.0.0' |
| 7 | + license :cannot_represent |
| 8 | + |
| 9 | + livecheck do |
| 10 | + skip 'Upstream package manager handles updates (brew cask on macOS, apt on Linux)' |
| 11 | + end |
| 12 | + |
| 13 | + def install |
| 14 | + system 'touch', 'trick-brew-to-install-meta-formula' |
| 15 | + prefix.install 'trick-brew-to-install-meta-formula' |
| 16 | + end |
| 17 | + |
| 18 | + def post_install |
| 19 | + if OS.mac? |
| 20 | + install_macos_cask |
| 21 | + elsif OS.linux? |
| 22 | + install_linux_apt |
| 23 | + end |
| 24 | + end |
| 25 | + |
| 26 | + def caveats |
| 27 | + if OS.mac? |
| 28 | + <<~CAVEAT |
| 29 | + 1Password CLI has been installed as a Homebrew cask. |
| 30 | + Update with: brew upgrade --cask 1password-cli |
| 31 | + CAVEAT |
| 32 | + else |
| 33 | + <<~CAVEAT |
| 34 | + 1Password CLI has been installed via the official 1Password APT repository. |
| 35 | + Update with: sudo apt-get update && sudo apt-get upgrade 1password-cli |
| 36 | + CAVEAT |
| 37 | + end |
| 38 | + end |
| 39 | + |
| 40 | + private |
| 41 | + |
| 42 | + def install_macos_cask |
| 43 | + return if system(HOMEBREW_BREW_FILE, 'list', '--cask', '1password-cli', err: :close, out: :close) |
| 44 | + |
| 45 | + system HOMEBREW_BREW_FILE, 'install', '--cask', '1password-cli' |
| 46 | + end |
| 47 | + |
| 48 | + def install_linux_apt |
| 49 | + setup_apt_repo |
| 50 | + apt_update_args = [ |
| 51 | + 'sudo', 'apt-get', 'update', |
| 52 | + '-o', 'Dir::Etc::sourcelist=sources.list.d/1password.list', |
| 53 | + '-o', 'Dir::Etc::sourceparts=-', |
| 54 | + '-o', 'APT::Get::List-Cleanup=0' |
| 55 | + ] |
| 56 | + system(*apt_update_args) |
| 57 | + system 'sudo', 'apt-get', 'install', '-y', '1password-cli' |
| 58 | + end |
| 59 | + |
| 60 | + def setup_apt_repo |
| 61 | + ohai 'Setting up 1Password APT repository...' |
| 62 | + arch = Hardware::CPU.arm? ? 'arm64' : 'amd64' |
| 63 | + install_apt_gpg_key |
| 64 | + install_apt_source(arch) |
| 65 | + install_debsig_policy |
| 66 | + end |
| 67 | + |
| 68 | + def install_apt_gpg_key |
| 69 | + gpg_keyring = '/usr/share/keyrings/1password-archive-keyring.gpg' |
| 70 | + return if File.exist?(gpg_keyring) |
| 71 | + |
| 72 | + gpg_cmd = 'curl -sS https://downloads.1password.com/linux/keys/1password.asc ' \ |
| 73 | + "| sudo gpg --dearmor --output #{gpg_keyring}" |
| 74 | + system 'bash', '-c', gpg_cmd |
| 75 | + end |
| 76 | + |
| 77 | + def install_apt_source(arch) |
| 78 | + gpg_keyring = '/usr/share/keyrings/1password-archive-keyring.gpg' |
| 79 | + sources_file = '/etc/apt/sources.list.d/1password.list' |
| 80 | + return if File.exist?(sources_file) |
| 81 | + |
| 82 | + deb_line = "deb [arch=#{arch} signed-by=#{gpg_keyring}] " \ |
| 83 | + "https://downloads.1password.com/linux/debian/#{arch} stable main" |
| 84 | + system 'bash', '-c', "echo '#{deb_line}' | sudo tee #{sources_file}" |
| 85 | + end |
| 86 | + |
| 87 | + def install_debsig_policy |
| 88 | + install_debsig_policy_file |
| 89 | + install_debsig_keyring |
| 90 | + end |
| 91 | + |
| 92 | + def install_debsig_policy_file |
| 93 | + policy_dir = '/etc/debsig/policies/AC2D62742012EA22' |
| 94 | + return if File.exist?("#{policy_dir}/1password.pol") |
| 95 | + |
| 96 | + system 'sudo', 'mkdir', '-p', policy_dir |
| 97 | + pol_cmd = 'curl -sS https://downloads.1password.com/linux/debian/debsig/1password.pol ' \ |
| 98 | + "| sudo tee #{policy_dir}/1password.pol" |
| 99 | + system 'bash', '-c', pol_cmd |
| 100 | + end |
| 101 | + |
| 102 | + def install_debsig_keyring |
| 103 | + keyring_dir = '/usr/share/debsig/keyrings/AC2D62742012EA22' |
| 104 | + return if File.exist?("#{keyring_dir}/debsig.gpg") |
| 105 | + |
| 106 | + system 'sudo', 'mkdir', '-p', keyring_dir |
| 107 | + debsig_cmd = 'curl -sS https://downloads.1password.com/linux/keys/1password.asc ' \ |
| 108 | + "| sudo gpg --dearmor --output #{keyring_dir}/debsig.gpg" |
| 109 | + system 'bash', '-c', debsig_cmd |
| 110 | + end |
| 111 | +end |
0 commit comments