aircon 0.2.2 → 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 +4 -4
- data/README.md +7 -2
- data/lib/aircon/cli.rb +5 -1
- data/lib/aircon/commands/up.rb +18 -1
- data/lib/aircon/configuration.rb +5 -3
- data/lib/aircon/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9ac8856bca869f0d9277eaecf8b36fd48593ce7d4daef1f5b02f636cb6699598
|
|
4
|
+
data.tar.gz: '0951d5c8358fa8bf87b94ba2bfde000a03059129b4e323d4f8f55185d055623d'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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 "
|
|
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 `
|
|
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 "
|
|
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
|
|
data/lib/aircon/commands/up.rb
CHANGED
|
@@ -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)
|
|
@@ -167,7 +184,7 @@ module Aircon
|
|
|
167
184
|
authed = "https://x-access-token:#{@config.gh_token}@github.com/"
|
|
168
185
|
system("docker", "exec", container, "git", "config", "--global",
|
|
169
186
|
"url.#{authed}.insteadOf", "https://github.com/")
|
|
170
|
-
system("docker", "exec", container, "git", "config", "--global",
|
|
187
|
+
system("docker", "exec", container, "git", "config", "--global", "--add",
|
|
171
188
|
"url.#{authed}.insteadOf", "git@github.com:")
|
|
172
189
|
end
|
|
173
190
|
checkout_branch(container, branch)
|
data/lib/aircon/configuration.rb
CHANGED
|
@@ -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,
|
|
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"]
|
data/lib/aircon/version.rb
CHANGED