Feat v0.6.18 ci bundled packages (#53)
All checks were successful
CI/CD / detect-changes (push) Successful in 4s
CI/CD / test-frontend (push) Successful in 6s
CI/CD / test-go-pg (push) Successful in 2m45s
CI/CD / test-sqlite (push) Successful in 2m58s
CI/CD / build-and-deploy (push) Successful in 1m37s

Co-authored-by: Jeffrey Smith <jasafpro@gmail.com>
Co-committed-by: Jeffrey Smith <jasafpro@gmail.com>
This commit was merged in pull request #53.
This commit is contained in:
2026-04-01 16:49:01 +00:00
committed by xcaliber
parent e7d1b53ebf
commit 1236220302
5 changed files with 30 additions and 11 deletions

View File

@@ -413,6 +413,7 @@ jobs:
echo "MEMORY_LIMIT=512Mi" >> "$GITHUB_OUTPUT" echo "MEMORY_LIMIT=512Mi" >> "$GITHUB_OUTPUT"
echo "CPU_REQUEST=50m" >> "$GITHUB_OUTPUT" echo "CPU_REQUEST=50m" >> "$GITHUB_OUTPUT"
echo "CPU_LIMIT=250m" >> "$GITHUB_OUTPUT" echo "CPU_LIMIT=250m" >> "$GITHUB_OUTPUT"
echo "BUNDLED_PACKAGES=*" >> "$GITHUB_OUTPUT"
echo "env_label=dev (PR #${{ gitea.event.pull_request.number }})" >> "$GITHUB_OUTPUT" echo "env_label=dev (PR #${{ gitea.event.pull_request.number }})" >> "$GITHUB_OUTPUT"
elif [[ "${{ gitea.ref }}" == refs/tags/v* ]]; then elif [[ "${{ gitea.ref }}" == refs/tags/v* ]]; then
VERSION="${{ gitea.ref_name }}" VERSION="${{ gitea.ref_name }}"
@@ -429,6 +430,7 @@ jobs:
echo "MEMORY_LIMIT=512Mi" >> "$GITHUB_OUTPUT" echo "MEMORY_LIMIT=512Mi" >> "$GITHUB_OUTPUT"
echo "CPU_REQUEST=100m" >> "$GITHUB_OUTPUT" echo "CPU_REQUEST=100m" >> "$GITHUB_OUTPUT"
echo "CPU_LIMIT=500m" >> "$GITHUB_OUTPUT" echo "CPU_LIMIT=500m" >> "$GITHUB_OUTPUT"
echo "BUNDLED_PACKAGES=notes,chat,chat-core,mermaid-renderer,schedules" >> "$GITHUB_OUTPUT"
echo "is_release=true" >> "$GITHUB_OUTPUT" echo "is_release=true" >> "$GITHUB_OUTPUT"
echo "env_label=production (${VERSION})" >> "$GITHUB_OUTPUT" echo "env_label=production (${VERSION})" >> "$GITHUB_OUTPUT"
else else
@@ -444,6 +446,7 @@ jobs:
echo "MEMORY_LIMIT=512Mi" >> "$GITHUB_OUTPUT" echo "MEMORY_LIMIT=512Mi" >> "$GITHUB_OUTPUT"
echo "CPU_REQUEST=50m" >> "$GITHUB_OUTPUT" echo "CPU_REQUEST=50m" >> "$GITHUB_OUTPUT"
echo "CPU_LIMIT=250m" >> "$GITHUB_OUTPUT" echo "CPU_LIMIT=250m" >> "$GITHUB_OUTPUT"
echo "BUNDLED_PACKAGES=notes,chat,chat-core" >> "$GITHUB_OUTPUT"
echo "env_label=test (main)" >> "$GITHUB_OUTPUT" echo "env_label=test (main)" >> "$GITHUB_OUTPUT"
fi fi
@@ -670,6 +673,7 @@ jobs:
STORAGE_CLASS: ${{ vars.STORAGE_CLASS }} STORAGE_CLASS: ${{ vars.STORAGE_CLASS }}
STORAGE_SIZE: ${{ vars.STORAGE_SIZE || '10Gi' }} STORAGE_SIZE: ${{ vars.STORAGE_SIZE || '10Gi' }}
STORAGE_BACKEND: ${{ vars.STORAGE_BACKEND || 'pvc' }} STORAGE_BACKEND: ${{ vars.STORAGE_BACKEND || 'pvc' }}
BUNDLED_PACKAGES: ${{ steps.setup.outputs.BUNDLED_PACKAGES }}
run: | run: |
# Render PVC first (must exist before backend references it) # Render PVC first (must exist before backend references it)
if [[ -n "${STORAGE_CLASS}" ]]; then if [[ -n "${STORAGE_CLASS}" ]]; then

View File

@@ -2,6 +2,22 @@
All notable changes to Armature are documented here. All notable changes to Armature are documented here.
## v0.6.18 — CI Bundle Wiring
Wire `BUNDLED_PACKAGES` env var into the Gitea CI pipeline so each
environment gets the correct package set at boot.
### Changed
- **CI: dev deploys** — `BUNDLED_PACKAGES=*` (install all, matches docker-compose default).
- **CI: test deploys** — `BUNDLED_PACKAGES=notes,chat,chat-core` (core surfaces only).
- **CI: prod deploys** — `BUNDLED_PACKAGES=notes,chat,chat-core,mermaid-renderer,schedules`.
- **docker-compose.yml** — default `BUNDLED_PACKAGES` changed from empty to `*` (install all for local dev).
### Fixed
- **TestBundledInstall_DefaultAllowlist** — updated test assertions to match v0.6.17's empty default set (was still expecting `notes` in curated defaults).
## v0.6.17 — Bug Fixes & Welcome Logic ## v0.6.17 — Bug Fixes & Welcome Logic
Fixes broken UI interactions (folder creation, team member add), dropdown Fixes broken UI interactions (folder creation, team member add), dropdown

View File

@@ -1 +1 @@
0.6.17 0.6.18

View File

@@ -33,7 +33,7 @@ services:
EXT_ALLOW_PRIVATE_IPS: ${EXT_ALLOW_PRIVATE_IPS:-true} EXT_ALLOW_PRIVATE_IPS: ${EXT_ALLOW_PRIVATE_IPS:-true}
LOG_FORMAT: ${LOG_FORMAT:-text} LOG_FORMAT: ${LOG_FORMAT:-text}
LOG_LEVEL: ${LOG_LEVEL:-info} LOG_LEVEL: ${LOG_LEVEL:-info}
BUNDLED_PACKAGES: ${BUNDLED_PACKAGES:-} BUNDLED_PACKAGES: ${BUNDLED_PACKAGES:-*}
# Dev seed users — ignored if ENVIRONMENT=production # Dev seed users — ignored if ENVIRONMENT=production
SEED_USERS: ${SEED_USERS:-alice:password123:user,bob:password456:user,charlie:password789:user} SEED_USERS: ${SEED_USERS:-alice:password123:user,bob:password456:user,charlie:password789:user}
volumes: volumes:

View File

@@ -441,7 +441,8 @@ func TestExportPackage_NotFound(t *testing.T) {
} }
} }
// TestBundledInstall_DefaultAllowlist verifies the curated default set behavior. // TestBundledInstall_DefaultAllowlist verifies that an empty allowlist
// installs nothing (defaultBundledPackages is empty since v0.6.17).
func TestBundledInstall_DefaultAllowlist(t *testing.T) { func TestBundledInstall_DefaultAllowlist(t *testing.T) {
stores := newTestStores(t) stores := newTestStores(t)
ctx := context.Background() ctx := context.Background()
@@ -449,7 +450,7 @@ func TestBundledInstall_DefaultAllowlist(t *testing.T) {
bundledDir := t.TempDir() bundledDir := t.TempDir()
packagesDir := t.TempDir() packagesDir := t.TempDir()
// Create packages: one in default set, one not // Create packages — neither should be installed with empty defaults
buildTestPkg(t, bundledDir, map[string]any{ buildTestPkg(t, bundledDir, map[string]any{
"id": "notes", "title": "Notes", "type": "surface", "version": "1.0.0", "id": "notes", "title": "Notes", "type": "surface", "version": "1.0.0",
}) })
@@ -457,19 +458,17 @@ func TestBundledInstall_DefaultAllowlist(t *testing.T) {
"id": "regex-tester", "title": "Regex Tester", "type": "extension", "version": "1.0.0", "id": "regex-tester", "title": "Regex Tester", "type": "extension", "version": "1.0.0",
}) })
// Empty allowlist → curated defaults // Empty allowlist → empty default set → nothing installed
InstallBundledPackages(bundledDir, packagesDir, "", stores, nil) InstallBundledPackages(bundledDir, packagesDir, "", stores, nil)
// "notes" is in the default set → should be installed pkg, _ := stores.Packages.Get(ctx, "notes")
pkg, err := stores.Packages.Get(ctx, "notes") if pkg != nil {
if err != nil || pkg == nil { t.Fatal("notes should NOT be installed (default set is empty)")
t.Fatal("notes should be installed (in default set)")
} }
// "regex-tester" is NOT in the default set → should be filtered
pkg, _ = stores.Packages.Get(ctx, "regex-tester") pkg, _ = stores.Packages.Get(ctx, "regex-tester")
if pkg != nil { if pkg != nil {
t.Fatal("regex-tester should NOT be installed (not in default set)") t.Fatal("regex-tester should NOT be installed (default set is empty)")
} }
} }