Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
7839f1f
cargo.lock re-gen
Dec 25, 2025
624b263
create linux/macos binaries
Dec 25, 2025
396768e
downgrade sqlx
Dec 25, 2025
baf2303
sqlx cache
Dec 25, 2025
a06ffd1
Disable SQLX_OFFLINE for prepare
Dec 25, 2025
b47dad9
sqlx-date.json generate
Dec 25, 2025
930fc11
sqlx-date.json check
Dec 25, 2025
b77855e
sqlx-date.json check
Dec 25, 2025
3a1063a
sqlx-date.json check
Dec 25, 2025
96239e3
sqlx-date.json check
Dec 25, 2025
8086318
sqlx 0.6 → 0.8 migration
Dec 26, 2025
b287eb9
no console for prod build for now
Dec 26, 2025
c634fbe
tests config
Dec 26, 2025
06416fc
config sources for tests
Dec 26, 2025
d8abbe5
access_control.conf in Dockerfile
Dec 26, 2025
56e2dd8
Added Default implementations for all configuration structs in config…
Dec 26, 2025
da02b09
test required db running
Dec 26, 2025
1aac318
migration fix, check if table casbin_rule table is created
Dec 27, 2025
2cb55b2
admin access project endpoint
Dec 27, 2025
a4ada14
feat: Implement MCP server foundation
Dec 27, 2025
1293377
root/admin_group user, MCP registry, tools implementation
Dec 28, 2025
3ccd14f
MCP server updates, websocker + cookie based auth, server connected
Dec 28, 2025
e8d739a
Marketplace API init
Dec 29, 2025
dc1fc2e
new migrations Marketplace added at Stacker
Dec 30, 2025
51085bf
marketplace + product + tests
Jan 1, 2026
e1cd930
marketplace + product + tests
Jan 1, 2026
fc423b6
root inherits user rights
Jan 1, 2026
105628e
category sync/category_code instead of category_id
Jan 2, 2026
550c1ef
access categories
Jan 2, 2026
1e11945
categories endpoint
Jan 2, 2026
72c6cb7
categories endpoint
Jan 2, 2026
9c8eb4a
marketplace, categories import from connectors
Jan 2, 2026
705167d
add connector example based on 3-d party auth service
Jan 2, 2026
c64008c
build on self-hosted, ssl problem
Jan 2, 2026
9fc5e52
Casbin rules allow CRUD templates operations to groupd_admin
Jan 3, 2026
bd423f5
connector structure unified
Jan 5, 2026
0c3d5c1
feat: implement comprehensive health check system
Jan 5, 2026
e830b0e
Potential fix for code scanning alert no. 6: Workflow does not contai…
vsilent Jan 5, 2026
2b33c38
fix: resolve compilation errors in health check module
Jan 5, 2026
a0a7ece
Merge pull request #78 from trydirect/worktree-2026-01-03T11-33-55
vsilent Jan 5, 2026
f74a45d
Agent's anonymous registration with deployment key
Jan 6, 2026
ecab1d8
Dockerhub, search namespaces and repos impl, not tested yet
Jan 6, 2026
7c315e8
api endpoint conflict fix
Jan 6, 2026
f0a8809
Automated tests for marketplace, user service, deployment_validators
Jan 6, 2026
b722f79
Automated tests for marketplace, user service, deployment_validators
Jan 6, 2026
6e1f3b4
Merge branch 'feature-marketplace' of https://github.com/trydirect/st…
Jan 6, 2026
a8f7b70
api prefix added
Jan 6, 2026
cc653ca
check deployment first and then register agent
Jan 6, 2026
1cac54c
keep agent registration separate
Jan 6, 2026
739c293
migration fix
Jan 6, 2026
0a8f6ca
migration fix
Jan 6, 2026
203f729
migrations revert
Jan 6, 2026
dff7312
Dockerhub, search namespaces and repos impl, not tested yet
Jan 7, 2026
9a91675
syntax fix
Jan 7, 2026
ab8ca5e
syntax fix
Jan 7, 2026
54cd0ce
update record, insert conflict fix, get template by slug and user
Jan 8, 2026
702ed24
few fixes and json response
Jan 9, 2026
912e844
new status panel commands
Jan 9, 2026
a0c4a0c
alter deployment_hash column
Jan 9, 2026
59c4f6a
Merge branch 'feature-marketplace' into worktree-2026-01-09T13-26-18
Jan 9, 2026
45c7024
status_panel commands
Jan 9, 2026
5de525b
remove FK constraint from commands
Jan 12, 2026
f59312c
agent's path in wait()
Jan 12, 2026
cab5394
Added deployment capabilities route: capabilities.rs with static comm…
Jan 13, 2026
9796bab
command_queue fix
Jan 13, 2026
f67cbd0
command_queue fix
Jan 13, 2026
ee0c5d3
Removed push logic from create.rs,Removed VaultClient dependency, we …
Jan 14, 2026
8169cef
casbin rule for enqueu endpoint
Jan 14, 2026
7d18ac8
Fix: Add Casbin agent role permissions for Status Panel
Jan 14, 2026
95c0f17
match report from agent by column id not command_id
Jan 15, 2026
35903b0
fetch by command_id not by id
Jan 15, 2026
9bc1045
sqlx files
Jan 15, 2026
b4f1ae6
User auth cache, compress internal requests
Jan 15, 2026
5f0bdbb
cache cookies
Jan 15, 2026
f72f5b8
STACKER_AGENT_POLL_TIMEOUT_SECS, STACKER_AGENT_POLL_INTERVAL_SECS con…
Jan 16, 2026
49eb1b7
casbin_reload config driven
Jan 16, 2026
5fc59fb
sqlx files for offline build
Jan 16, 2026
105df02
updated changelog and readme
Jan 16, 2026
7a84e87
defaults
Jan 16, 2026
3de6275
self-hosted build disabled
Jan 16, 2026
d9deeca
Added next_poll_secs to the response body metadata for the agent wait…
Jan 16, 2026
ff55436
Potential fix for code scanning alert no. 14: Cleartext transmission …
vsilent Jan 16, 2026
30cb6cb
test fix, vault v1
Jan 16, 2026
6d73e2a
Merge branch 'feature-performance-improvements' of https://github.com…
Jan 16, 2026
60e2fbe
skip when Postgres isn’t reachable, so these won’t fail in CI without…
Jan 16, 2026
41188a4
Fixed the missing fixture by switching the test to an existing mock p…
Jan 16, 2026
6d102ec
fix blocked requests by removed that mutex and switched to Rc<RefCell…
Jan 16, 2026
c48d697
fix docker.yml copy dist, npm fix
Jan 16, 2026
0a5afab
Fix get_subscription_plan MCP tool: use correct /oauth_server/api/me …
Jan 19, 2026
629f960
different db pool for agent and api
Jan 19, 2026
1f483ee
conflict resolved
Jan 21, 2026
03fc852
Vault client, integration, fetch config, mcp tools
Jan 22, 2026
d4f73fc
App config managenent endpoints
Jan 22, 2026
922b9dd
deserialize env fix, new tests
Jan 22, 2026
f8a280a
Choose Server step. 1.SSH/StatusPanel mode. Manage SSH keys.
Jan 23, 2026
a064514
server/project/:id and other casbin rules, migrations
Jan 23, 2026
16d9979
server/project/:id and other casbin rules, migrations
Jan 23, 2026
31c7d13
fix: correct Vault path for SSH key storage
Jan 23, 2026
87ed17c
fix correct vault path
Jan 23, 2026
36c03ee
prepend nonce to ciphertext, remove redis dependency
Jan 23, 2026
60a52a6
fix(deploy): include deployment_hash in RabbitMQ payload for saved_it…
Jan 25, 2026
419c46d
deployment hash inconsistency bug
Jan 25, 2026
ded24c2
chore: redact slack webhook placeholder
Jan 25, 2026
fab822f
Custom SSH key to -> Vault -> Install service
Jan 26, 2026
b6858f4
Add MQ listener service for deployment status updates
Jan 26, 2026
403cc53
Connect stacker_queue to TryDirect network for RabbitMQ access
Jan 26, 2026
eff398c
ai chat, get deployment status fix
Jan 26, 2026
d66fd32
feat: Add deploy_app command validation
Jan 26, 2026
a950cf5
snapshot
Jan 27, 2026
7901197
snapshot
Jan 28, 2026
6229441
config sync, remove_app command, project_app service
Jan 29, 2026
f70786e
fmt all, compose_content on app deployment
Jan 29, 2026
1449409
vault path fix
Jan 30, 2026
0ceacfb
compose genrator for a single app, store config to vault on app creation
Jan 30, 2026
1746740
config sync
Jan 30, 2026
41d7b90
CORS and app config fetch
Jan 31, 2026
d2a544e
feat: auto-create project and deployment when deploy_app has no exist…
Feb 1, 2026
e4999d5
feat: add ConfigureProxyCommandRequest for nginx proxy manager integr…
Feb 1, 2026
c9db476
feat(mcp): add proxy management tools for AI chat
Feb 1, 2026
16b5a2a
env to vault fix
Feb 2, 2026
a272379
new tools for ai assistant, user_service restructuring
Feb 2, 2026
9b7f69a
compose file handling
Feb 2, 2026
8f6f78e
project app config edit
Feb 3, 2026
2d49b05
sqlx data
Feb 3, 2026
4d9e876
clippy fixes, fmt all
Feb 3, 2026
e847ed5
include_system: bool fix
Feb 3, 2026
2ff0de7
wait for cmd to execute, ai add project_app
Feb 3, 2026
746b20e
ai apps_info
Feb 3, 2026
48560bc
fix: populate container states in snapshot from health check results
Feb 3, 2026
f44173a
fix: fetch health commands separately with results for container states
Feb 3, 2026
520a210
fix: deduplicate containers by app_code in snapshot
Feb 4, 2026
6a7e5de
Update src/connectors/user_service/utils.rs
vsilent Feb 4, 2026
0af0e11
Initial plan
Copilot Feb 4, 2026
3769cf0
Update src/connectors/user_service/client.rs
vsilent Feb 4, 2026
41bcc76
Initial plan
Copilot Feb 4, 2026
b71dad5
Rename is_plan_upgrade to is_plan_higher_tier for clarity
Copilot Feb 4, 2026
324d253
Update comment to match new function name terminology
Copilot Feb 4, 2026
e5e38b9
feat: extract parse_bool_env helper function to deduplicate boolean p…
Copilot Feb 4, 2026
d2ed251
style: run cargo fmt to fix formatting
Copilot Feb 4, 2026
5e2aef6
Merge pull request #98 from trydirect/copilot/sub-pr-94
vsilent Feb 4, 2026
74a8139
Merge pull request #99 from trydirect/copilot/sub-pr-94-again
vsilent Feb 4, 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
  •  
  •  
  •  
14 changes: 11 additions & 3 deletions .env
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
#BUILDKIT_PROGRESS=plain
#DOCKER_BUILDKIT=1
DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/stacker
DATABASE_URL=postgres://postgres:postgres@stackerdb:5432/stacker
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=stacker
Expand All @@ -14,3 +12,13 @@ REDIS_URL=redis://127.0.0.1/
VAULT_ADDRESS=http://127.0.0.1:8200
VAULT_TOKEN=your_vault_token_here
VAULT_AGENT_PATH_PREFIX=agent

STACKER_CASBIN_RELOAD_ENABLED=true
STACKER_CASBIN_RELOAD_INTERVAL_SECS=60

STACKER_AGENT_POLL_TIMEOUT_SECS=30
STACKER_AGENT_POLL_INTERVAL_SECS=2

# Deployment Settings
# Base directory for deployments on target servers
DEFAULT_DEPLOY_DIR=/home/trydirect
44 changes: 27 additions & 17 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,35 @@ on:
branches:
- main
- testing
- dev
pull_request:
branches:
- main

env:
SQLX_OFFLINE: true
- dev

jobs:

cicd-docker:
name: Cargo and npm build
runs-on: ubuntu-latest
#runs-on: self-hosted
env:
SQLX_OFFLINE: true
steps:
- name: Checkout sources
uses: actions/checkout@v4

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

- name: Verify .sqlx cache exists
run: |
ls -lh .sqlx/ || echo ".sqlx directory not found"
find .sqlx -type f 2>/dev/null | wc -l

- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
Expand All @@ -30,7 +43,7 @@ jobs:
components: rustfmt, clippy

- name: Cache cargo registry
uses: actions/cache@v3.0.7
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: docker-registry-${{ hashFiles('**/Cargo.lock') }}
Expand All @@ -39,7 +52,7 @@ jobs:
docker-

- name: Cache cargo index
uses: actions/cache@v3.0.7
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: docker-index-${{ hashFiles('**/Cargo.lock') }}
Expand All @@ -52,7 +65,7 @@ jobs:
head -c16 /dev/urandom > src/secret.key

- name: Cache cargo build
uses: actions/cache@v3.0.7
uses: actions/cache@v4
with:
path: target
key: docker-build-${{ hashFiles('**/Cargo.lock') }}
Expand All @@ -65,12 +78,6 @@ jobs:
with:
command: check

- name: Run cargo sqlx prepare
uses: actions-rs/cargo@v1
with:
command: sqlx prepare
args: --release

- name: Cargo test
if: ${{ always() }}
uses: actions-rs/cargo@v1
Expand All @@ -97,20 +104,22 @@ jobs:
command: clippy
args: -- -D warnings

- name: Run cargo build
- name: Build server (release)
uses: actions-rs/cargo@v1
with:
command: build
args: --release
args: --release --bin server

- name: npm install, build, and test
if: ${{ hashFiles('web/package.json') != '' }}
working-directory: ./web
run: |
npm install
npm run build
# npm test

- name: Archive production artifacts
if: ${{ hashFiles('web/package.json') != '' }}
uses: actions/upload-artifact@v4
with:
name: dist-without-markdown
Expand All @@ -119,14 +128,15 @@ jobs:
!web/dist/**/*.md

- name: Display structure of downloaded files
if: ${{ hashFiles('web/package.json') != '' }}
run: ls -R web/dist

- name: Copy app files and zip
run: |
mkdir -p app/stacker/dist
cp target/release/stacker app/stacker
cp -a web/dist/. app/stacker
cp docker/prod/Dockerfile app/Dockerfile
cp target/release/server app/stacker/server
if [ -d web/dist ]; then cp -a web/dist/. app/stacker; fi
cp Dockerfile app/Dockerfile
cd app
touch .env
tar -czvf ../app.tar.gz .
Expand Down
74 changes: 67 additions & 7 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
name: Rust
permissions:
contents: read

on:
push:
Expand All @@ -8,14 +10,72 @@ on:

env:
CARGO_TERM_COLOR: always
SQLX_OFFLINE: true

jobs:
build:
runs-on: ubuntu-latest
name: Build binaries (Linux/macOS)
env:
SQLX_OFFLINE: true
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
artifact_name: stacker-linux-x86_64
- os: macos-latest
target: x86_64-apple-darwin
artifact_name: stacker-macos-x86_64
- os: macos-latest
target: aarch64-apple-darwin
artifact_name: stacker-macos-aarch64
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: cargo build
run: cargo build --verbose
- name: cargo test
run: cargo test --verbose
- uses: actions/checkout@v4
- name: Verify .sqlx cache exists
run: |
ls -lh .sqlx/ || echo ".sqlx directory not found"
find .sqlx -type f 2>/dev/null | wc -l
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: ${{ matrix.target }}
override: true
- name: Cache cargo registry
uses: actions/cache@v4
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@v4
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@v4
with:
path: target
key: ${{ runner.os }}-target-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-target-${{ matrix.target }}-
- name: Build server (release)
run: cargo build --release --target ${{ matrix.target }} --bin server --verbose

- name: Build console (release with features)
run: cargo build --release --target ${{ matrix.target }} --bin console --features explain --verbose
- name: Prepare binaries
run: |
mkdir -p artifacts
cp target/${{ matrix.target }}/release/server artifacts/server
cp target/${{ matrix.target }}/release/console artifacts/console
tar -czf ${{ matrix.artifact_name }}.tar.gz -C artifacts .
- name: Upload binaries
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact_name }}
path: ${{ matrix.artifact_name }}.tar.gz
retention-days: 7
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ configuration.yaml.backup
configuration.yaml.orig
.vscode/
.env
docs/*.sql
config-to-validate.yaml
17 changes: 17 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,20 @@ repos:
- id: ggshield
language_version: python3
stages: [commit]
- repo: local
hooks:
- id: cargo-fmt
name: cargo fmt --all
entry: cargo fmt --all
language: system
stages: [commit]
- id: cargo-clippy
name: SQLX_OFFLINE=true cargo clippy
entry: bash -c 'SQLX_OFFLINE=true cargo clippy'
language: system
stages: [commit]
- id: cargo-test
name: SQLX_OFFLINE=true cargo test
entry: bash -c 'SQLX_OFFLINE=true cargo test'
language: system
stages: [commit]

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.

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