aircon 0.2.3 → 0.3.0

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: ad7f99a5579b400b27bc3e93f8b8c406f4cac54b05d0c6bfb9c56da7e61c8b9a
4
- data.tar.gz: 9db99d87dafcc4973935950ffa6b467c89df4883c8b580510ce807027f859cfd
3
+ metadata.gz: 9ac8856bca869f0d9277eaecf8b36fd48593ce7d4daef1f5b02f636cb6699598
4
+ data.tar.gz: '0951d5c8358fa8bf87b94ba2bfde000a03059129b4e323d4f8f55185d055623d'
5
5
  SHA512:
6
- metadata.gz: d4f1434492f22047d0cb3d48079bfdad27abc5cf7a067cdb52fbf5e1e9a53a5dd7f1978027bf2090f272b5da366a8ed9a36e2589f37fa716a576c0d6fdbb8240
7
- data.tar.gz: fdf4441d3a31b880159c635e678e13606f9ceee48ce44b79f3f0adb673cf11f379a82e4f2bddf82b29db4ff7194d654994961017782bd005f23e87dc53f950a4
6
+ metadata.gz: 3054801130314399c6cfdedf6febc6f920852b3f1ebfc34f54fd3e3fa52806f80cc374df90b48e0b09e0e0a66f1b95aadbf2327e8b08166e550a56b0701dce77
7
+ data.tar.gz: 8d493d59d2d8b635637fa40f440102bbf13d7d8eb1a602e4f951cd41983b83225d0d7a5fad166c77834bfd25d097fd2fe55b0d059019409df243fcefe8cfb385
data/README.md CHANGED
@@ -177,13 +177,17 @@ app_name: my-app
177
177
  # GitHub personal access token — authenticates git and gh inside the container
178
178
  gh_token: <%= ENV['GITHUB_TOKEN'] %>
179
179
 
180
- # How to obtain Claude Code credentials: "keychain" (macOS), "file", or "oauth_token"
180
+ # How to obtain Claude Code credentials: "keychain" (macOS), "file", "oauth_token", or "api_key"
181
181
  credentials_source: keychain
182
182
 
183
183
  # Claude Code OAuth token — used when credentials_source is "oauth_token"
184
184
  # Falls back to CLAUDE_CODE_OAUTH_TOKEN env var if not set here.
185
185
  claude_code_oauth_token: <%= ENV['CLAUDE_CODE_OAUTH_TOKEN'] %>
186
186
 
187
+ # Anthropic API key — used when credentials_source is "api_key"
188
+ # Falls back to ANTHROPIC_API_KEY env var if not set here.
189
+ anthropic_api_key: <%= ENV['ANTHROPIC_API_KEY'] %>
190
+
187
191
  # Workspace folder path inside the container
188
192
  workspace_path: /my-app
189
193
 
@@ -214,8 +218,9 @@ init_script: .aircon/aircon_init.sh
214
218
  | `compose_file` | `.aircon/docker-compose.yml` | Docker Compose file to use |
215
219
  | `app_name` | basename of cwd | App name passed to Compose as `AIRCON_APP_NAME` |
216
220
  | `gh_token` | `nil` | GitHub token; sets `GH_TOKEN` and `GITHUB_PERSONAL_ACCESS_TOKEN` in the container |
217
- | `credentials_source` | `keychain` | `keychain` (macOS), `file` (~/.claude/.credentials.json), or `oauth_token` |
221
+ | `credentials_source` | `keychain` | `keychain` (macOS), `file` (~/.claude/.credentials.json), `oauth_token`, or `api_key` |
218
222
  | `claude_code_oauth_token` | `nil` | OAuth token for `oauth_token` mode; falls back to `CLAUDE_CODE_OAUTH_TOKEN` env var |
223
+ | `anthropic_api_key` | `nil` | Anthropic API key for `api_key` mode; sets `ANTHROPIC_API_KEY` in the container, falls back to `ANTHROPIC_API_KEY` env var |
219
224
  | `workspace_path` | `/workspace` | Workspace folder path inside the container |
220
225
  | `claude_config_path` | `~/.claude.json` | Host path to `claude.json` |
221
226
  | `claude_dir_path` | `~/.claude` | Host path to `.claude/` directory |
data/lib/aircon/cli.rb CHANGED
@@ -70,13 +70,17 @@ module Aircon
70
70
  # GitHub personal access token (supports ERB)
71
71
  # gh_token: <%= ENV['GITHUB_TOKEN'] %>
72
72
 
73
- # How to obtain Claude Code credentials: "keychain" (macOS), "file", or "oauth_token"
73
+ # How to obtain Claude Code credentials: "keychain" (macOS), "file", "oauth_token", or "api_key"
74
74
  # credentials_source: keychain
75
75
 
76
76
  # Claude Code OAuth token — used when credentials_source is "oauth_token" (supports ERB)
77
77
  # Falls back to CLAUDE_CODE_OAUTH_TOKEN env var if not set here.
78
78
  # claude_code_oauth_token: <%= ENV['CLAUDE_CODE_OAUTH_TOKEN'] %>
79
79
 
80
+ # Anthropic API key — used when credentials_source is "api_key" (supports ERB)
81
+ # Falls back to ANTHROPIC_API_KEY env var if not set here.
82
+ # anthropic_api_key: <%= ENV['ANTHROPIC_API_KEY'] %>
83
+
80
84
  # Workspace folder path inside the container
81
85
  # workspace_path: /myproject
82
86
 
@@ -82,6 +82,11 @@ module Aircon
82
82
 
83
83
  write_credentials(File.join(staging, ".claude", ".credentials.json"))
84
84
 
85
+ # In api_key mode, strip any OAuth credentials so the container relies solely on ANTHROPIC_API_KEY.
86
+ if @config.credentials_source == "api_key"
87
+ FileUtils.rm_f(File.join(staging, ".claude", ".credentials.json"))
88
+ end
89
+
85
90
  home = @config.container_home
86
91
  rewrite_paths(staging, home)
87
92
  user = @config.container_user
@@ -159,6 +164,18 @@ module Aircon
159
164
  end
160
165
  end
161
166
 
167
+ if @config.credentials_source == "api_key"
168
+ key = @config.anthropic_api_key || ENV["ANTHROPIC_API_KEY"]
169
+ if key && !key.to_s.empty?
170
+ system("docker", "exec", "-u", "root", container, "bash", "-c",
171
+ "grep -qF 'export ANTHROPIC_API_KEY=' /etc/bash.bashrc 2>/dev/null || " \
172
+ "echo 'export ANTHROPIC_API_KEY=\"#{key}\"' >> /etc/bash.bashrc")
173
+ else
174
+ warn "Warning: credentials_source is 'api_key' but no ANTHROPIC_API_KEY found " \
175
+ "(set anthropic_api_key in .aircon/aircon.yml or the ANTHROPIC_API_KEY env var)."
176
+ end
177
+ end
178
+
162
179
  # Configure git and create branch
163
180
  system("docker", "exec", container, "git", "config", "--global", "user.email", @config.git_email)
164
181
  system("docker", "exec", container, "git", "config", "--global", "user.name", @config.git_name)
@@ -6,7 +6,7 @@ require "erb"
6
6
  module Aircon
7
7
  class Configuration
8
8
  CONFIG_FILE = ".aircon/aircon.yml"
9
- VALID_CREDENTIALS_SOURCES = %w[keychain file oauth_token].freeze
9
+ VALID_CREDENTIALS_SOURCES = %w[keychain file oauth_token api_key].freeze
10
10
 
11
11
  DEFAULTS = {
12
12
  "compose_file" => ".aircon/docker-compose.yml",
@@ -14,6 +14,7 @@ module Aircon
14
14
  "gh_token" => nil,
15
15
  "credentials_source" => "keychain",
16
16
  "claude_code_oauth_token" => nil,
17
+ "anthropic_api_key" => nil,
17
18
  "workspace_path" => nil,
18
19
  "claude_config_path" => "~/.claude.json",
19
20
  "claude_dir_path" => "~/.claude",
@@ -25,8 +26,8 @@ module Aircon
25
26
  }.freeze
26
27
 
27
28
  attr_reader :compose_file, :app_name, :gh_token, :credentials_source, :claude_code_oauth_token,
28
- :workspace_path, :claude_config_path, :claude_dir_path, :service, :git_email,
29
- :git_name, :container_user, :init_script
29
+ :anthropic_api_key, :workspace_path, :claude_config_path, :claude_dir_path, :service,
30
+ :git_email, :git_name, :container_user, :init_script
30
31
 
31
32
  def initialize(dir: Dir.pwd)
32
33
  attrs = DEFAULTS.dup
@@ -44,6 +45,7 @@ module Aircon
44
45
  @gh_token = attrs["gh_token"]
45
46
  @credentials_source = attrs["credentials_source"]
46
47
  @claude_code_oauth_token = attrs["claude_code_oauth_token"]
48
+ @anthropic_api_key = attrs["anthropic_api_key"]
47
49
  @workspace_path = attrs["workspace_path"] || "/workspace"
48
50
  @claude_config_path = attrs["claude_config_path"]
49
51
  @claude_dir_path = attrs["claude_dir_path"]
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aircon
4
- VERSION = "0.2.3"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aircon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philip Nguyen