Skip to content
Merged

Dev #198

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
411 commits
Select commit Hold shift + click to select a range
12876bc
Merge branch 'dev' of github.com:trydirect/stacker into dev
robotizeit May 1, 2026
c01aab9
list host fix
robotizeit May 2, 2026
d793016
testing proxy config
robotizeit May 2, 2026
6578499
remote-secret management implemented
robotizeit May 2, 2026
5ea8849
reference added
robotizeit May 2, 2026
0cbaebf
casbin rule, secrets
robotizeit May 2, 2026
0a9c694
prefer /api/v1/project... first
robotizeit May 4, 2026
a5ba123
Discover valid remote service app codes for a project command. 'stack…
robotizeit May 4, 2026
1207060
build error fix
robotizeit May 4, 2026
ea0e24f
fix test
robotizeit May 4, 2026
4c531ce
bug fixed: ./stacker agent list containers --json used the active age…
robotizeit May 4, 2026
2aa7cca
test fixes
robotizeit May 4, 2026
7ef6f1a
Initial plan
Codex May 6, 2026
bba4f9a
Initial plan
Codex May 6, 2026
2f8100a
Add regression tests for nginx-proxy-manager volumes
Codex May 6, 2026
0526948
Prevent duplicate nginx-proxy-manager deployment when proxy.type is set
Codex May 6, 2026
e40b6f9
Preserve nginx-proxy-manager volumes from deploy compose_file
Codex May 6, 2026
443fc72
- Added an auth regression test in src/middleware/authentication/met…
robotizeit May 6, 2026
466f8c5
- Added an auth regression test in src/middleware/authentication/met…
robotizeit May 6, 2026
35713df
Merge pull request #177 from trydirect/codex/fix-nginx-proxy-manager-…
vsilent May 7, 2026
c1b31fe
Merge branch 'main' into codex/fix-duplicate-nginx-proxy-manager-startup
vsilent May 7, 2026
43eb73c
Merge pull request #178 from trydirect/codex/fix-duplicate-nginx-prox…
vsilent May 7, 2026
5a06a03
Fix broken nginx proxy manager CLI tests
robotizeit May 7, 2026
275e6a5
var interpolation fixes
robotizeit May 7, 2026
6a8e5e9
conflicts resolved, main merged into dev, cli re-testing interpolation
robotizeit May 7, 2026
f7c000f
healthcheck field restored
robotizeit May 7, 2026
731e8e3
whoami added, when user forgets which account is used for current pro…
robotizeit May 8, 2026
1f2ab5e
The cloud path now uses the saved login URL instead of the hardcoded …
robotizeit May 8, 2026
7588137
cloud keys contracts, cloud key fomr env fixes
robotizeit May 8, 2026
925eaae
ssh key backup
robotizeit May 8, 2026
4d5b4f0
ssh key authorize endpoint rights migrations
robotizeit May 8, 2026
b3815cd
skip platfrm managed app codes from project_app
robotizeit May 8, 2026
fef63d8
hide npm from cli output
robotizeit May 8, 2026
d80c566
--no-ssl for configure-proxy
robotizeit May 9, 2026
3374a39
cloud firewall, let's start with htz
robotizeit May 9, 2026
c3930d1
Status Panel now runs Docker Compose against the requested service o…
robotizeit May 9, 2026
dad90a5
fix(cloud-firewall): decode saved provider tokens
robotizeit May 11, 2026
894e4c1
Stacker Server now validates reused Hetzner cloud servers before depl…
robotizeit May 11, 2026
38d9a3b
fix(cloud-firewall): show provider list results
robotizeit May 11, 2026
5fdc5f7
firewall check
robotizeit May 11, 2026
dc2a91f
fix(cloud-firewall): target resolved Hetzner firewall
robotizeit May 11, 2026
346fdb6
service creds implemented
robotizeit May 11, 2026
bf0b203
store ip
robotizeit May 11, 2026
e5343f7
fix(project-apps): add delete route authorization
robotizeit May 11, 2026
1b30ab8
Merge pull request #179 from trydirect/service-creds-management
vsilent May 11, 2026
cee4053
feat(release): prepare v0.2.8 service secret support
robotizeit May 12, 2026
0867429
improvements for service secret registration
robotizeit May 12, 2026
cca2ba8
docs(website): restore release highlights
robotizeit May 12, 2026
347faf9
Merge pull request #180 from trydirect/service-creds-management
vsilent May 12, 2026
a16aabd
test(bdd): run cucumber scenarios serially
robotizeit May 12, 2026
c03eea9
fix(marketplace): decode public template category
robotizeit May 12, 2026
860d3d3
chore(deps): update dependency ws to v8.20.1
renovate[bot] May 12, 2026
532105a
private registry auth reuse for Status-managed pull
robotizeit May 12, 2026
1c61732
cli registry creds
robotizeit May 13, 2026
295c93c
feat(config): standardize runtime env handling
robotizeit May 13, 2026
039485f
fix(secrets): avoid runtime env sync on secret writes
robotizeit May 14, 2026
08e0cdb
feat(secrets): add push aliases for remote secret apply
robotizeit May 14, 2026
b902506
merge service .env with the vault creds and update it on remote server
robotizeit May 14, 2026
b812dfd
docs updates
robotizeit May 14, 2026
5f28cb3
docs update
robotizeit May 14, 2026
a8ba459
merge creds, tests
robotizeit May 14, 2026
6bf0e01
fix(deploy-app): enrich agent enqueue env configs
robotizeit May 14, 2026
fa05a28
phase1
robotizeit May 14, 2026
7dc002f
chore(release): prepare v0.2.8
robotizeit May 15, 2026
5a0d0e6
Merge branch 'dev' into main
robotizeit May 15, 2026
37281eb
Update Rust crate actix-cors to 0.7.0
renovate[bot] May 15, 2026
d17ffb9
Update Rust crate indexmap to v2.14.0
renovate[bot] May 15, 2026
bfc8e23
Merge pull request #140 from trydirect/renovate/ws-8.x-lockfile
vsilent May 15, 2026
7ab7148
Merge pull request #159 from trydirect/renovate/actix-cors-0.x
vsilent May 15, 2026
9a4759d
Merge pull request #146 from trydirect/renovate/indexmap-2.x-lockfile
vsilent May 15, 2026
c9e124a
Config inventory implemented
robotizeit May 17, 2026
a195b94
config promote and docs
robotizeit May 17, 2026
9e95eec
formatting columns for inventory list
robotizeit May 17, 2026
3b8bf50
prevent npm duplicate run
robotizeit May 18, 2026
e495e6c
conflict fix
robotizeit May 18, 2026
b870322
merged config-inventory + prevent port conflict
robotizeit May 18, 2026
8666235
remote metadata warnings are now concise by default
robotizeit May 18, 2026
d8da95c
stacker proxy, npm reinstall, cloud firewall debug.
robotizeit May 18, 2026
7451851
Merge branch 'ai-state-contracts' into dev
robotizeit May 18, 2026
29c40a7
merge from AI-state/MCP work
robotizeit May 19, 2026
f9e8ee7
agent.system_info in status output
robotizeit May 19, 2026
5caffef
MCP fixes for local deployments, config setup ai
robotizeit May 19, 2026
aa87888
default server type fix
robotizeit May 19, 2026
92e07c4
Stacker now mirrors deploy-time config files like .env
robotizeit May 19, 2026
5f3a5f3
test fix
robotizeit May 19, 2026
c7a3acb
location fix
robotizeit May 19, 2026
fac7749
merge from main
robotizeit May 19, 2026
39e83b3
deserialization error fix
robotizeit May 21, 2026
78f2526
proxy fixes, pipe fixes, custom service deploy fix
robotizeit May 21, 2026
fda9dc2
pipe scan --containers web, now detects the html forms locally
robotizeit May 21, 2026
0b64f84
pipe crate for adapters, imap/pop3, sdk
robotizeit May 22, 2026
363b933
extend pipe target with adapetrs
robotizeit May 22, 2026
6a82683
local pipe validation, trigger, activate, tested
robotizeit May 22, 2026
433788e
include crates dir
robotizeit May 22, 2026
e113f55
migrations
robotizeit May 22, 2026
02ded4d
activate_pipe, deactivate_pipe, and trigger_pipe are now
robotizeit May 23, 2026
0e1fa87
security fix, agent capabilities endpoint casbin rule set
robotizeit May 23, 2026
63e5933
Changed Stacker to generate stable runtime label
robotizeit May 23, 2026
e1a6cc4
npm creds fix
robotizeit May 23, 2026
bd49289
Update ws to version 8.21.0
depfu[bot] May 23, 2026
fb621bc
preflight fix for --force-new
robotizeit May 25, 2026
f2a75c0
pipe mcp, seed npm default creds
robotizeit May 26, 2026
00ae0b6
ai scenarios, integrated scenario-aware prompting
robotizeit May 27, 2026
9d995d2
few prompt examples
robotizeit May 27, 2026
bd3c936
ommit --server-id in firewall and cred commands when lock file for cl…
robotizeit May 28, 2026
276d72e
default auth url, api url to ~/.config/stacker/config.yml, device au…
robotizeit May 29, 2026
b4688de
oauth login, /me fix
robotizeit May 30, 2026
0340488
fmt all
robotizeit May 30, 2026
fbc4236
copy scenarios
robotizeit May 30, 2026
9c102e5
inject default external network when npm is used
robotizeit Jun 1, 2026
6b90df8
stacker agent health fix, npm detection fix, logs fix
robotizeit Jun 1, 2026
14468a9
adjust separator width, keep static for now
robotizeit Jun 1, 2026
aef7d80
Merge pull request #186 from trydirect/dev
vsilent Jun 1, 2026
c78352a
bump version to v0.2.9
robotizeit Jun 1, 2026
a17cf6d
adjust separator width, keep static for now
robotizeit Jun 1, 2026
746c35f
bump version to v0.2.9
robotizeit Jun 1, 2026
5803237
New preflight in src/cli/install_runner.rs:
robotizeit Jun 4, 2026
4217cf3
site update, compose volumes fix
robotizeit Jun 5, 2026
698c6d6
merge main
robotizeit Jun 5, 2026
1631a35
new cli cmd aliases, stacker list, stacker agent list
robotizeit Jun 5, 2026
eb46704
replace irrelevant link, added server id to status output
robotizeit Jun 5, 2026
d80b199
Vendor profile
Jun 12, 2026
281a0c1
Merge branch 'main' into dev
Jun 12, 2026
5683ae4
protoc fixes
Jun 12, 2026
596323a
created_at, rating for vendor profile
Jun 12, 2026
53f6f55
template rating
Jun 12, 2026
b964a53
template rating
Jun 12, 2026
b0b773e
Stripe/Payout provider implemented
Jun 13, 2026
cde1e6b
vendor profile spec for UI
Jun 13, 2026
f414e5f
PayoutProvider security hardening, Stripe webhook secret is now requ…
Jun 13, 2026
4406d3e
find marketplace app using cli, install command
Jun 13, 2026
10c968d
show current subscription plan info
robotizeit Jun 15, 2026
19e3118
fixed origin fix regression. stacker explain env, status panel link w…
robotizeit Jun 15, 2026
6691e8e
stacker install <slug> can reuse part of stacker.yml as deploy context.
robotizeit Jun 16, 2026
e35dfe3
stacker install <app> --domain=<>, commonDomain = base_domain is capt…
robotizeit Jun 16, 2026
4896e0c
doc update
robotizeit Jun 16, 2026
2696bcc
config parser install.inputs
robotizeit Jun 16, 2026
7439e02
filter by slug
robotizeit Jun 16, 2026
7cd1602
UserProfile now includes id, user identity across services
robotizeit Jun 16, 2026
07fbb18
defaults on install
robotizeit Jun 17, 2026
871129d
do not show extra debug info if not requested with DEBUG=true
robotizeit Jun 17, 2026
de8b2f9
server-side fix, cloud token automatic pick up if not specified in st…
robotizeit Jun 17, 2026
91cd947
reuse saved token when using cli
robotizeit Jun 17, 2026
32c2748
stacker config setup server, deploy to own server in the local network
robotizeit Jun 18, 2026
89d8872
deploy to intranet server, agent install to intranet server
robotizeit Jun 19, 2026
e96627d
setsid nohup status, when deploy to intranet server
robotizeit Jun 20, 2026
ece6184
vendor profile, creator_user_id
robotizeit Jun 21, 2026
7ab402c
new update_vendor_public_profile() function that
robotizeit Jun 21, 2026
b26f591
tests fix
robotizeit Jun 21, 2026
684c2da
casbin rules for vendor profile patch
robotizeit Jun 22, 2026
6aa01c8
test fix
robotizeit Jun 22, 2026
af8319b
find vendor by id also
robotizeit Jun 22, 2026
159880e
get_vendor_profile
robotizeit Jun 22, 2026
6bbd158
edit vendor profile, casbin rules
robotizeit Jun 22, 2026
9477dd5
vendor slug from template
robotizeit Jun 22, 2026
5ee2692
fix: case-insensitive JOIN on creator_user_id, match vendor by public…
robotizeit Jun 22, 2026
2ef58e4
fix: case-insensitive JOIN on creator_user_id, match vendor by public…
robotizeit Jun 22, 2026
b3af2f0
exclude local files
robotizeit Jun 23, 2026
e9c2133
local files must be removed
robotizeit Jun 23, 2026
0c16a21
fix: update test for vendor lookup by creator_user_id, update .gitignore
robotizeit Jun 23, 2026
2ec186a
feat(admin): GET /api/admin/vendors lists all vendor profiles
robotizeit Jun 23, 2026
cf48ecf
fix(casbin): add GET /api/admin/vendors policy for group_admin and ad…
robotizeit Jun 23, 2026
3954df5
redact.rs for template_definitions
robotizeit Jun 23, 2026
356ef7c
redact tests
robotizeit Jun 23, 2026
608ea6e
redact yaml string, remove json redaction for stack definitions
robotizeit Jun 24, 2026
fc4c44d
yaml string into JSONB
robotizeit Jun 24, 2026
cb09162
fix(payouts): refuse mock provider in production, warn in dev
robotizeit Jun 25, 2026
3b5669a
vault mTLS: add mTLS client cert support to Vault clients
robotizeit Jun 26, 2026
92ae1f6
mTLS, stacker templates command and aliases to list all available tem…
robotizeit Jun 27, 2026
237285b
Merge pull request #187 from trydirect/mTLS
vsilent Jun 27, 2026
054c12c
Update DEFAULT_VAULT_URL to :8443 for mTLS
robotizeit Jun 28, 2026
fabc9af
Merge pull request #188 from trydirect/mTLS
vsilent Jun 28, 2026
c50b209
plan re-check
robotizeit Jun 28, 2026
ed8f10b
re-check
robotizeit Jun 28, 2026
f88c6a0
remove duplicate get_user_profile
robotizeit Jun 29, 2026
1a6cb46
fix import
robotizeit Jun 29, 2026
8f42035
client rs pool_max_idle_per_host(0) fix attempt
robotizeit Jun 29, 2026
bf21311
check template availability
robotizeit Jun 29, 2026
6addf96
handle yaml
robotizeit Jun 29, 2026
3976b12
install <stack> tests
robotizeit Jun 29, 2026
c9ec626
install from marketplace
robotizeit Jun 29, 2026
af8d7ad
Security-audit: initial stage
robotizeit Jun 30, 2026
2079f20
stacker install <template> fixed. stack_definition conversion
robotizeit Jul 1, 2026
7a05122
cloud ip/local ip fix
robotizeit Jul 1, 2026
c92c2a1
The fix uses container-only ports (8080 — no host binding) so parse_c…
robotizeit Jul 1, 2026
fa1f6a3
Update Rust crate russh to 0.61 [SECURITY]
renovate[bot] Jul 1, 2026
ce6d704
public_ports
robotizeit Jul 2, 2026
3094726
M2 residual , H1 policy decision security fixes
robotizeit Jul 2, 2026
0cf4773
both occurrences of content.to_lowercase() for miner pattern matching…
robotizeit Jul 2, 2026
29d8c1b
security fix: HookPolicy
robotizeit Jul 2, 2026
5daa73f
Auto-configure cloud firewall
robotizeit Jul 2, 2026
2b8e149
Merge pull request #191 from trydirect/renovate/crate-russh-vulnerabi…
vsilent Jul 2, 2026
512de20
Merge pull request #185 from trydirect/depfu/update/npm/ws-8.21.0
vsilent Jul 2, 2026
1f6e888
proto
robotizeit Jul 2, 2026
93e4e80
security validator fixes: validator patterns, sanitizer, path/content…
robotizeit Jul 2, 2026
5997f9b
SKILL file, publish to marketplace helper
robotizeit Jul 3, 2026
c42bc7f
image tag fix. changes require more testing.
robotizeit Jul 3, 2026
5de26d9
tests did not pass, add docker_tag
robotizeit Jul 3, 2026
b694030
v0.3.0. --from-github added, SKILL.md
robotizeit Jul 6, 2026
31df4ac
security improvements
robotizeit Jul 7, 2026
15f94ea
test coverage P1 — Auth middleware, P2 — Stripe webhook signature, …
robotizeit Jul 7, 2026
52c6a76
help/hint on the next step
robotizeit Jul 7, 2026
4a83dda
Merge branch 'main' into dev
vsilent Jul 7, 2026
ba4399f
Rename AI model from 'qwen2.5-code' to 'qwen2.5-coder'
vsilent Jul 7, 2026
0c3fae8
Update ai_client.rs
vsilent Jul 7, 2026
ead1623
plan mapping adjustments
robotizeit Jul 7, 2026
92284f0
fix test: default Ollama model is qwen2.5-coder, not llama3
robotizeit Jul 7, 2026
5578380
Merge pull request #189 from trydirect/dev
vsilent Jul 7, 2026
fdcf963
hotfix, cloud key requirements
robotizeit Jul 8, 2026
7ca3e78
generated_ssh_keypair_is_valid_openssh_format
robotizeit Jul 8, 2026
73d470d
ssh key format tests
robotizeit Jul 8, 2026
54f6191
stacker target fix, code formatting, roadmap file added
robotizeit Jul 10, 2026
83b7f78
skip docker not presented error
robotizeit Jul 10, 2026
7a54879
cloud firewall port fix for web ui
robotizeit Jul 10, 2026
cff1bdc
config_bundle improvements and fixes
robotizeit Jul 14, 2026
673e6ae
bind mount fix for remote target, config_bundle fix
robotizeit Jul 15, 2026
e7c6072
Bump version to 0.3.1
robotizeit Jul 15, 2026
9ea7117
'stacker service add' password generator, stacker pipe, container pro…
robotizeit Jul 17, 2026
d93305e
hint command fix
robotizeit Jul 17, 2026
28dc922
install from marketplace compose fix, cloud params in cli command
robotizeit Jul 17, 2026
9469bc1
feat: add --name flag to pipe create for non-interactive mode
robotizeit Jul 19, 2026
eaa009a
ci: add agent-executor Docker build job
robotizeit Jul 19, 2026
0a4f210
spin up agent-executor on pipe activate
robotizeit Jul 19, 2026
2ef820d
source_url: Option<String> added, optional external source URL (agent…
robotizeit Jul 20, 2026
98b788b
cargo fmt --all
robotizeit Jul 20, 2026
55e5c4d
feat: add --source-url to pipe trigger and activate CLI commands
robotizeit Jul 20, 2026
bdbbc62
target_headers implemented
robotizeit Jul 20, 2026
7e1d9c8
feat: add target_headers support for authenticated pipe delivery
robotizeit Jul 20, 2026
6c912c7
Update Rust crate derive_builder to 0.20.0
renovate[bot] Jul 21, 2026
0bb25f0
Update Rust crate dialoguer to 0.12
renovate[bot] Jul 21, 2026
d6af03c
Update Rust crate docker-compose-types to 0.24.0
renovate[bot] Jul 21, 2026
009ad5b
Update Rust crate hmac to 0.13.0
renovate[bot] Jul 21, 2026
bd41c2a
website update, with v0.3.1 features and fixes
robotizeit Jul 21, 2026
eda36eb
stack_definition fix when install from marketplace
robotizeit Jul 21, 2026
e4afea8
return eror on unapproved package
robotizeit Jul 21, 2026
d067499
Added config_has_buildable_app: skip the synthesized app service when…
robotizeit Jul 21, 2026
661335e
Merge remote-tracking branch 'origin/renovate/hmac-0.x' into dev
robotizeit Jul 22, 2026
07e58d5
Merge remote-tracking branch 'origin/renovate/docker-compose-types-0.…
robotizeit Jul 22, 2026
6dbc3de
Merge remote-tracking branch 'origin/renovate/dialoguer-0.x' into dev
robotizeit Jul 22, 2026
65873b8
libs upgrade
robotizeit Jul 22, 2026
cbf11c3
per-install payment model, website updates
robotizeit Jul 22, 2026
6666d8c
stack author/creator (vendor) column for stack templates command
robotizeit Jul 22, 2026
c5b67c5
phantom-app fix
robotizeit Jul 22, 2026
e174a53
Implemented the Stacker-side webhook federation (items 1–4) + tests.
robotizeit Jul 22, 2026
d50d7a1
tests fixed. cargo fmt --all
robotizeit Jul 22, 2026
e6d317e
legacy stack services
robotizeit Jul 23, 2026
0c3122e
test fix, new test added synthesize_catalog_compose_builds_multi_serv…
robotizeit Jul 23, 2026
fd0cb05
error msg context fix
robotizeit Jul 23, 2026
3f79a21
read stack catalog payload
robotizeit Jul 23, 2026
58c569f
fix(marketplace): carry services[]/kind through catalog enrichment merge
robotizeit Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 8 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,3 +135,11 @@ Unit tests (lib) use `--test-threads=1` (see Makefile) because many share global
### CLI commands

`stacker-cli` commands are implemented in `src/cli/`. `console` commands are in `src/console/commands/`. Both use `clap` with `#[derive(Parser, Subcommand)]`. Interactive prompts use `dialoguer`; progress bars use `indicatif`.

### Service deployment scope

`stacker service deploy <name>` is project-scoped by default for services declared in `stacker.yml`. Normal custom services must update `/home/trydirect/project/docker-compose.yml` and must not create `/home/trydirect/<service>/docker-compose.yml` unless the user explicitly chooses standalone mode, such as a future `--standalone` or `--scope standalone` flag.

Only platform-managed services live outside the project directory by default. Current examples are Status Panel (`/home/trydirect/statuspanel`) and Nginx Proxy Manager (`/home/trydirect/nginx_proxy_manager`). Add regression tests for any service/proxy deploy change that could duplicate a project-scoped service as a standalone compose project.

Stacker-managed compose services use stable runtime labels with the `my.stacker.*` prefix: `my.stacker.project_id`, `my.stacker.target`, `my.stacker.scope`, `my.stacker.service`, and `my.stacker.dns`. Keep logical service codes and Docker DNS names separate; for Nginx Proxy Manager use `my.stacker.service=nginx_proxy_manager` and `my.stacker.dns=nginx-proxy-manager`.
61 changes: 52 additions & 9 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,41 @@ jobs:

cicd-docker:
name: Cargo and npm build
#runs-on: ubuntu-latest
runs-on: [self-hosted, linux]
runs-on: ubuntu-latest
#runs-on: [self-hosted, linux]
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
ports:
- 5432/tcp
options: >-
--health-cmd "pg_isready -U postgres"
--health-interval 10s
--health-timeout 5s
--health-retries 5
env:
SQLX_OFFLINE: true
steps:
- name: Checkout sources
uses: actions/checkout@v4
with:
ref: ${{ github.ref }}
- name: Export PostgreSQL connection env
run: |
echo "PGHOST=127.0.0.1" >> "$GITHUB_ENV"
echo "PGPORT=${{ job.services.postgres.ports['5432'] }}" >> "$GITHUB_ENV"
echo "PGUSER=postgres" >> "$GITHUB_ENV"
echo "PGPASSWORD=postgres" >> "$GITHUB_ENV"

- name: Install OpenSSL build deps
- name: Install OpenSSL and protoc build deps
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y pkg-config libssl-dev
sudo apt-get install -y pkg-config libssl-dev protobuf-compiler

- name: Verify .sqlx cache exists
run: |
Expand Down Expand Up @@ -68,6 +88,17 @@ jobs:
run: |
head -c16 /dev/urandom > src/secret.key

- name: Wait for PostgreSQL
run: |
for _ in $(seq 1 60); do
if bash -lc "exec 3<>/dev/tcp/${PGHOST}/${PGPORT}" 2>/dev/null; then
exit 0
fi
sleep 1
done
echo "PostgreSQL did not become ready in time" >&2
exit 1

- name: Cache cargo build
uses: actions/cache@v4
with:
Expand Down Expand Up @@ -114,6 +145,14 @@ jobs:
command: build
args: --release --bin server

- name: Set up Node.js
if: ${{ hashFiles('web/package.json') != '' }}
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
cache-dependency-path: web/package-lock.json

- name: npm install, build, and test
if: ${{ hashFiles('web/package.json') != '' }}
working-directory: ./web
Expand Down Expand Up @@ -155,14 +194,17 @@ jobs:

cicd-linux-docker:
name: CICD Docker
#runs-on: ubuntu-latest
runs-on: [self-hosted, linux]
runs-on: ubuntu-latest
#runs-on: [self-hosted, linux]
needs: cicd-docker
steps:
- name: Checkout sources
uses: actions/checkout@v4
with:
ref: ${{ github.event_name == 'pull_request' && github.head_ref || github.ref }}
- name: Verify shared pipe fixtures
run: |
test -d "${GITHUB_WORKSPACE}/tests/fixtures/pipe-contract"

-
name: Set up QEMU
Expand All @@ -189,13 +231,15 @@ jobs:
uses: docker/build-push-action@v6
with:
context: .
build-contexts: |
shared_fixtures=${{ github.workspace }}/tests/fixtures
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.docker_tags.outputs.tags }}

stackerdb-docker:
name: StackerDB Docker
#runs-on: ubuntu-latest
runs-on: [self-hosted, linux]
runs-on: ubuntu-latest
#runs-on: [self-hosted, linux]
needs: cicd-docker
steps:
- name: Checkout sources
Expand Down Expand Up @@ -229,4 +273,3 @@ jobs:
file: ./stackerdb/Dockerfile
push: true
tags: ${{ steps.stackerdb_tags.outputs.tags }}

8 changes: 8 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@ jobs:
steps:
- uses: actions/checkout@v6

- name: Install protoc
run: |
if [ "$RUNNER_OS" = "Linux" ]; then
sudo apt-get update -qq && sudo apt-get install -y protobuf-compiler
elif [ "$RUNNER_OS" = "macOS" ]; then
brew install protobuf
fi

- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
Expand Down
87 changes: 46 additions & 41 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,13 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Install protoc
run: |
if [ "$RUNNER_OS" = "Linux" ]; then
sudo apt-get update -qq && sudo apt-get install -y protobuf-compiler
elif [ "$RUNNER_OS" = "macOS" ]; then
brew install protobuf
fi
- name: Verify .sqlx cache exists
run: |
ls -lh .sqlx/ || echo ".sqlx directory not found"
Expand All @@ -41,27 +48,11 @@ jobs:
toolchain: stable
target: ${{ matrix.target }}
override: true
- name: Cache cargo registry
uses: actions/cache@v5
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-registry-
- name: Cache cargo index
uses: actions/cache@v5
- name: Cache Cargo registry/git (no target — cross-compiled release builds cause cache bloat)
uses: Swatinem/rust-cache@v2
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-index-
- name: Cache target directory
uses: actions/cache@v5
with:
path: target
key: ${{ runner.os }}-target-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-target-${{ matrix.target }}-
cache-targets: "false"
key: ${{ matrix.target }}
- name: Build server (release)
run: cargo build --release --target ${{ matrix.target }} --bin server --verbose

Expand All @@ -87,35 +78,49 @@ jobs:
test:
name: Run CLI tests
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
ports:
- 5432/tcp
options: >-
--init
--health-cmd "pg_isready -U postgres"
--health-interval 10s
--health-timeout 5s
--health-retries 5
env:
SQLX_OFFLINE: true
steps:
- uses: actions/checkout@v4
- name: Export PostgreSQL connection env
run: |
echo "PGHOST=127.0.0.1" >> "$GITHUB_ENV"
echo "PGPORT=${{ job.services.postgres.ports['5432'] }}" >> "$GITHUB_ENV"
echo "PGUSER=postgres" >> "$GITHUB_ENV"
echo "PGPASSWORD=postgres" >> "$GITHUB_ENV"
- name: Install protoc
run: sudo apt-get update -qq && sudo apt-get install -y protobuf-compiler
- name: Wait for PostgreSQL
run: |
for _ in $(seq 1 60); do
if bash -lc "exec 3<>/dev/tcp/${PGHOST}/${PGPORT}" 2>/dev/null; then
exit 0
fi
sleep 1
done
echo "PostgreSQL did not become ready in time" >&2
exit 1
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Cache cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ubuntu-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
ubuntu-cargo-registry-
- name: Cache cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ubuntu-cargo-index-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
ubuntu-cargo-index-
- name: Cache target directory
uses: actions/cache@v4
with:
path: target
key: ubuntu-target-tests-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
ubuntu-target-tests-
- name: Cache Cargo registry/git/target (with stale-artifact pruning)
uses: Swatinem/rust-cache@v2
- name: Run CLI integration tests
run: cargo test --tests --verbose
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,10 @@ configuration.yaml.orig
docker/local/
docs/*.sql
config-to-validate.yaml
*.bak
*.bak
.claude/

plan/
.stacker
done.txt
post-deploy-ran.txt

This file was deleted.

This file was deleted.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading