Feat v0.6.18 ci bundled packages #53

Merged
xcaliber merged 3 commits from feat/v0.6.18-ci-bundled-packages into main 2026-04-01 16:49:01 +00:00
5 changed files with 30 additions and 11 deletions

View File

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

View File

@@ -2,6 +2,22 @@
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
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}
LOG_FORMAT: ${LOG_FORMAT:-text}
LOG_LEVEL: ${LOG_LEVEL:-info}
BUNDLED_PACKAGES: ${BUNDLED_PACKAGES:-}
BUNDLED_PACKAGES: ${BUNDLED_PACKAGES:-*}
# Dev seed users — ignored if ENVIRONMENT=production
SEED_USERS: ${SEED_USERS:-alice:password123:user,bob:password456:user,charlie:password789:user}
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) {
stores := newTestStores(t)
ctx := context.Background()
@@ -449,7 +450,7 @@ func TestBundledInstall_DefaultAllowlist(t *testing.T) {
bundledDir := 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{
"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",
})
// Empty allowlist → curated defaults
// Empty allowlist → empty default set → nothing installed
InstallBundledPackages(bundledDir, packagesDir, "", stores, nil)
// "notes" is in the default set → should be installed
pkg, err := stores.Packages.Get(ctx, "notes")
if err != nil || pkg == nil {
t.Fatal("notes should be installed (in default set)")
pkg, _ := stores.Packages.Get(ctx, "notes")
if pkg != nil {
t.Fatal("notes should NOT be installed (default set is empty)")
}
// "regex-tester" is NOT in the default set → should be filtered
pkg, _ = stores.Packages.Get(ctx, "regex-tester")
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)")
}
}