Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
683fa6f
fix: ensure scope-based sharing logic in JetStream key construction a…
dbotwinick May 24, 2026
434921e
deps: update google.golang.org/genproto dependencies to latest versions
dbotwinick May 25, 2026
c931557
feat: add RetryPolicy + cross-workspace service task delivery
dbotwinick May 26, 2026
46c48a7
feat: improve error handling in KV operations by resolving pending sy…
dbotwinick May 26, 2026
ad78b9c
feat: implement asynchronous task assignment handling to prevent dead…
dbotwinick May 26, 2026
fa4aa83
feat: ensure typed failure responses are emitted for KV operation errors
dbotwinick May 26, 2026
0a37f58
feat: normalize body=None in proxy_http and proxy_http_async to preve…
dbotwinick May 28, 2026
d425f0a
feat: add raw downstream tap for routing correlated responses and all…
dbotwinick May 28, 2026
5ca5ca7
feat: implement CLAIM operation for task management, allowing assigne…
dbotwinick May 29, 2026
7cdc7a0
feat: implement per-identity authentication failure throttle to reduc…
dbotwinick May 29, 2026
52a36d0
feat: enhance gateway connection management with credential refresh a…
dbotwinick May 29, 2026
c5e275a
feat: add connection status query operations and response handling to…
dbotwinick May 29, 2026
04dc784
feat: add task priority support for improved dispatch ordering and fi…
dbotwinick May 31, 2026
c6166d7
feat: add Authorization field to task options and implement ClaimTask…
dbotwinick May 31, 2026
9c44831
feat: add atomic conditional write operations (SetNX, CompareAndSet, …
dbotwinick Jun 1, 2026
033a00a
feat: implement infra-coordination fast-path for WorkflowEngine acces…
dbotwinick Jun 1, 2026
87fa529
feat: implement embedded workflow store selection for PostgreSQL and …
dbotwinick Jun 1, 2026
d66d18f
feat: add pagination support to KV operations with limit and cursor o…
dbotwinick Jun 1, 2026
f364afe
feat: add PURGE_IDENTITY operation for removal-only purging of KV nam…
dbotwinick Jun 1, 2026
6c01322
feat: enhance DispatchTransformResult and TransformResult for create_…
dbotwinick Jun 2, 2026
4a86cb3
feat: add event sending capability and improve progress topic resolution
dbotwinick Jun 2, 2026
a978985
feat(kv): add atomic SetAdd/SetCard primitive across all backends
dbotwinick Jun 2, 2026
3460b23
feat(workflow): add workflow_joins store layer for fan-in joins
dbotwinick Jun 2, 2026
97a64e6
feat(workflow): add fan-in/coalesce join destination engine
dbotwinick Jun 2, 2026
f458d6b
feat(proto): add join ops, KV set primitives, and task correlation fi…
dbotwinick Jun 2, 2026
60ac01c
feat(workflow): add join deadline/timeout sweep with persisted actions
dbotwinick Jun 2, 2026
9a8f580
feat(workflow): set-mode joins via SET_ADD/SET_CARD over gRPC + SDK
dbotwinick Jun 2, 2026
04ff92f
feat: idempotent create_task for exactly-once join firing
dbotwinick Jun 2, 2026
f636189
feat(workflow): join observability ops (LIST/GET/CANCEL_JOIN)
dbotwinick Jun 2, 2026
475dcb3
docs(workflow): comprehensive Workflow Engine guide
dbotwinick Jun 2, 2026
6b860ca
feat(proto): add TaskCompletionEvent (feed-B) config
dbotwinick Jun 2, 2026
4c81db7
feat(tasks): persist correlation_id, root_task_id, completion_event
dbotwinick Jun 2, 2026
121b05a
feat: feed-B task-completion events for workflow joins
dbotwinick Jun 2, 2026
222a7d7
docs(workflow): document feed B and task correlation as implemented
dbotwinick Jun 2, 2026
8dd7ad5
chore(proto): regenerate per-message TypeScript bindings
dbotwinick Jun 3, 2026
a3548b5
Merge feat/workflow-joins: workflow fan-in/coalesce/set joins
dbotwinick Jun 3, 2026
918e2b5
feat(proxy-terminator): add tenant_id to stamp X-Auth-Tenant-ID in st…
dbotwinick Jun 18, 2026
a7b9dae
feat(gateway): mint canonical X-Auth-* identity headers on every Prox…
dbotwinick Jun 18, 2026
31fb92f
feat(gateway): complete semi-strict mTLS auth mode
dbotwinick Jun 18, 2026
e527fb5
feat(python-client): gRPC keepalive for silent-drop detection
dbotwinick Jun 18, 2026
77b56f4
feat(acl): role/group authorization with additive evaluation
dbotwinick Jun 18, 2026
f2d7c44
feat(python-client): role/group + explain_access admin convenience me…
dbotwinick Jun 18, 2026
7e718a6
fix(acl): honor op.RuleId in REVOKE (delete_acl_rule by rule_id) + ad…
dbotwinick Jun 18, 2026
6e519c7
feat(acl): on-behalf-of authorization for ACL operations
dbotwinick Jun 19, 2026
224f047
feat(auth): anonymous-cert + per-user API-key connection auth
dbotwinick Jun 19, 2026
6746b16
feat(sdk/python): add PrincipalType constants (canonical principal-ty…
dbotwinick Jun 19, 2026
802867f
fix(gateway): expand _subject_workspaces to '*' in minted X-Auth-Work…
dbotwinick Jun 20, 2026
0a9f562
feat(sdk/python): env-tunable infinite reconnect + connection-gated h…
dbotwinick Jun 20, 2026
436cedd
fix(keepalive): permit SDK streamless keepalive — stop GOAWAY too_man…
dbotwinick Jun 23, 2026
84a7f98
feat(gateway): task-msg assignee authorization + audit/log KV & TaskO…
dbotwinick Jun 24, 2026
fd78cbe
fix(proxy-sidecar): unify relay onto RelayMux for both modes — fixes …
dbotwinick Jun 24, 2026
1969fb2
fix(relaymux): broadcast IncomingMessage (Msg) to relay sub-clients
dbotwinick Jun 24, 2026
0dfbf57
fix(relaymux): route relay sub-client proxy responses back to owner
dbotwinick Jun 24, 2026
3562c18
feat(proxysidecar): tenant-relay + aggregator service-tunnel modes
dbotwinick Jun 25, 2026
5565d6c
feat(sdk): emit ClientOptions.Metadata as stream headers on Connect
dbotwinick Jun 25, 2026
ab09d98
test(gateway,state): semi-strict tenant identity + cross-backend resu…
dbotwinick Jun 25, 2026
bbc7064
feat(proxysidecar): WatchTenants snapshot_complete sentinel
dbotwinick Jun 25, 2026
4a2cf96
feat(sdk/kv): expose AuthorizationContext on KV operations
dbotwinick Jun 26, 2026
fb3f146
feat(proxysidecar): dial unix:// terminator backends
dbotwinick Jun 26, 2026
6d4dddf
feat(gateway,sdk): propagate resolved OBO subject on delivered messages
dbotwinick Jun 26, 2026
ba44415
feat(sdk): add ServiceTopic helper for workspace-less service principals
dbotwinick Jun 26, 2026
fffae90
otel: add OTLP metrics + Go runtime metrics to gateway + aetherlite
dbotwinick Jun 28, 2026
e5034d7
fix(otel): gateway traces use OTLP gRPC exporter (match meter + 4317 …
dbotwinick Jun 28, 2026
6ff4e6c
feat(kv): permit MetricsBridge principal to access the KV store
dbotwinick Jun 28, 2026
a0c36e1
fix(gateway): correct stale per-user progress topic comment
dbotwinick Jul 7, 2026
bed9744
feat(gateway): add uu:: user-broadcast topic for cross-window user ta…
dbotwinick Jul 7, 2026
351f2e6
docs: document uu:: user-broadcast channel
dbotwinick Jul 7, 2026
bfb7097
feat(sdk): add user-broadcast (uu::) send helpers
dbotwinick Jul 7, 2026
8e9c234
feat(cleanup): reap stale interactive tasks via TTL sweep
dbotwinick Jul 7, 2026
07c9070
sdk(python): create_task forwards retry_policy to CreateTaskRequest
dbotwinick Jul 11, 2026
2164ee0
feat(authproxy): internal-only /auth/verify-optional (optional-auth e…
dbotwinick Jul 16, 2026
ffddad8
fix(authproxy): /auth/verify-optional anonymous path emits identity h…
dbotwinick Jul 17, 2026
c084e73
feat(gateway): ServiceIdentity.no_pool_consumer to opt out of pool-ta…
dbotwinick Jul 17, 2026
142b6dd
feat(gateway): stale agent_startup task TTL reaper + proxysidecar age…
dbotwinick Jul 20, 2026
222d7de
fix(workflow): dispatch event handling off the receive loop (async) t…
dbotwinick Jul 20, 2026
e2d5bd0
fix(sdk/go): metric/event topic helpers must use "::" separator
dbotwinick Jul 20, 2026
c4a6843
fix(gateway): allow agent principals to publish own metrics without w…
dbotwinick Jul 20, 2026
2c8302a
feat(gateway): log task COMPLETE/FAIL outcomes (success + every rejec…
dbotwinick Jul 21, 2026
f8836f9
fix(cleanup): run TTL sweeps single-node-direct + add pool-task sweep
dbotwinick Jul 21, 2026
c3d290a
fix(orchestration): retire orchestrated_task_queue rows reliably + re…
dbotwinick Jul 22, 2026
600147e
feat(audit): scheduled retention sweep + coalesce high-volume route e…
dbotwinick Jul 22, 2026
a0b3627
fix(cleanup): wire QueueReconcileInterval into gateway/aetherlite config
dbotwinick Jul 22, 2026
368b72e
fix(router/badger): persist consumer offset after replay
dbotwinick Jul 22, 2026
b8ace47
fix(lite): harden badger/sqlite stores against connection-storm write…
dbotwinick Jul 22, 2026
e45607b
fix(router/badger): retry saveOffset on optimistic-concurrency conflict
dbotwinick Jul 22, 2026
8cf3080
fix(gateway/router): resume-or-tail user broadcast + live task-lane subs
dbotwinick Jul 22, 2026
f3c1fc4
fix(gateway/router): task-lane replays, progress resume-or-tail, badg…
dbotwinick Jul 22, 2026
c554a12
fix(router/badger): expire orphaned consumer offsets via TTL (7d defa…
dbotwinick Jul 22, 2026
2148e4c
fix(sdk/python): drop bogus KVOperation int_value field in kv_increme…
dbotwinick Jul 23, 2026
5f46445
docs: sync README/CLAUDE/CHANGELOG + docs/ with current source
dbotwinick Jul 23, 2026
e121133
docs(changelog): split unreleased 0.2.2 from released 0.2.1
dbotwinick Jul 23, 2026
2da2687
chore(version): bump Aether components to v0.2.2 and update dependencies
dbotwinick Jul 23, 2026
1fb74bc
chore(deps): update go-backpressure to v0.1.1 and normalize Go to 1.2…
dbotwinick Jul 23, 2026
5c5556b
ci: bump go-version 1.25.10 -> 1.25.12 in workflows
dbotwinick Jul 23, 2026
c5c7a59
chore(deps): include aether-api-go module in versions.yaml for versio…
dbotwinick Jul 23, 2026
60c1fd6
chore(deps): tidy go.sum across api/sdk/server after version+protobuf…
dbotwinick Jul 23, 2026
878ec81
fix(proxysidecar): don't require a workspace for the service identity
dbotwinick Jul 23, 2026
d61e28e
fix(proxysidecar): connect as a workspace-less service (support both …
dbotwinick Jul 23, 2026
9ebebcb
test(cluster): gate cluster setup on JetStream readiness, not a fixed…
dbotwinick Jul 23, 2026
ad3a390
chore(lint): clear golangci-lint findings (errcheck, staticcheck, unu…
dbotwinick Jul 23, 2026
f3a219a
fix(build): bump server/Dockerfile Go 1.25.10 -> 1.25.12 (complete th…
dbotwinick Jul 23, 2026
68d9fd2
test(proxysidecar): widen gateway-stream connect timeouts (CI -race f…
dbotwinick Jul 23, 2026
71f0535
feat(gateway/auth): dev-mode bypass for anonymous impersonable princi…
dbotwinick Jul 23, 2026
9dac809
ci: serialize integration + e2e test jobs to stop 2-core-runner flakes
dbotwinick Jul 23, 2026
fff5b10
docs(security): add the two new docker/docker cp-race advisories
dbotwinick Jul 23, 2026
f1556b7
ci(security): informational non-blocking govulncheck scan of sdk/go
dbotwinick Jul 23, 2026
708fd9a
test(cluster): widen backup-roundtrip waits for CI -race load
dbotwinick Jul 23, 2026
db1a922
test(cluster): -race-aware deadline scaling to end integration flakes
dbotwinick Jul 23, 2026
182705c
docs: correct README config/instructions + prune out-of-place proxy docs
dbotwinick Jul 23, 2026
2e8af5e
fix(acl/sqlite): parse granted_at TEXT in group/role list reads
dbotwinick Jul 23, 2026
dcd67af
feat(proto): add `noPoolConsumer` field to typescript ServiceIdentity…
dbotwinick Jul 24, 2026
03a6e7c
fix(ci): add missing `uv` dependency in version-check workflow
dbotwinick Jul 24, 2026
bebd971
fix(acl): repair inert '_any_authenticated' wildcard rules
dbotwinick Jul 25, 2026
1ccd0ff
fix(test): deflake tenant-relay tunnel-EOF test via gated half-close
dbotwinick Jul 25, 2026
ed563ee
build(proto): pin the codegen toolchain in versions.yaml and reconcil…
dbotwinick Jul 25, 2026
bebcb34
build(proto): replace compile_protos.sh with the repo-tools compile-p…
dbotwinick Jul 25, 2026
5f56d6c
ci(proto): generate proto-check.yml from versions.yaml
dbotwinick Jul 25, 2026
8729ff2
fix(sdk-python): declare the test-only requests, httpx and pytest-asy…
dbotwinick Jul 25, 2026
1b59601
ci: generate version-check, test-python and test-npm from versions.yaml
dbotwinick Jul 25, 2026
bd08127
ci: generate publish, release and container-build workflows from vers…
dbotwinick Jul 25, 2026
735dd2e
fix(acl/sqlite): default-deny the shared per-user KV scopes (parity w…
dbotwinick Jul 25, 2026
09f25a9
refactor(server): rename module to github.com/scitrera/aether/server
dbotwinick Jul 25, 2026
e69ddf4
fix(acl): drop the inert '_global' wildcard rule instead of repairing it
dbotwinick Jul 25, 2026
d13a149
fix(sdk-go): report from the audit-submit helper with t.Error, not t.…
dbotwinick Jul 25, 2026
37e2345
ci: generate publish-go and reuse test workflows via workflow_call
dbotwinick Jul 25, 2026
ac10bae
fix(sdk-go): clear golangci-lint findings and drop dead legacy methods
dbotwinick Jul 25, 2026
95d3496
ci: generate test-go and split the service-container jobs into integr…
dbotwinick Jul 25, 2026
d540526
fix(sdk-ts): upgrade vitest to v3 so the suite runs on current Node 24
dbotwinick Jul 25, 2026
504fe60
ci: allow-list the four docker/docker advisories and stop duplicate t…
dbotwinick Jul 25, 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
  •  
  •  
  •  
128 changes: 74 additions & 54 deletions .github/workflows/build.yml → .github/workflows/build-docker.yml
Original file line number Diff line number Diff line change
@@ -1,28 +1,31 @@
name: Build and Push Docker Images
# Generated by scitrera-repo-tools `generate-ci-gha`. Do not edit by hand;
# re-run the generator after editing versions.yaml. Run
# `generate-ci-gha` (no flags) to check for drift, `generate-ci-gha --force` to apply.

concurrency:
group: docker-build-${{ github.ref }}
cancel-in-progress: true
name: Build & push Docker images

on:
push:
# branches: [ main ]
tags: [ 'v*.*.*' ]
tags:
- 'v*.*.*'
workflow_dispatch:
inputs:
version:
description: 'Override version (e.g. 0.1.58 or v0.1.58). Leaving empty produces sha-only tags. Used when redeploying an existing release with rebuilt artifacts.'
description: 'Override version (e.g. 0.1.58 or v0.1.58). Empty produces sha-only tags.'
required: false
type: string
# pull_request:
# branches: [ main ]

env:
GATEWAY_IMAGE: aether
LITE_IMAGE: aetherlite
concurrency:
group: docker-build-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read
packages: write

jobs:
build-gateway:
build-aether:
name: Build aether (QEMU multi-arch)
runs-on: ubuntu-latest
permissions:
contents: read
Expand All @@ -37,47 +40,55 @@ jobs:
- uses: docker/setup-buildx-action@v3

- name: Login to GHCR
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Login to DockerHub
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Install uv
uses: astral-sh/setup-uv@v9.0.0

- name: Read image version from versions.yaml
id: imgver
run: |
VER=$(uvx --from 'scitrera-repo-tools==0.1.17' sync-versions --print-version aether-gateway)
echo "version=$VER" >> "$GITHUB_OUTPUT"
echo "major_minor=$(echo $VER | cut -d. -f1-2)" >> "$GITHUB_OUTPUT"

- name: Compute workflow_dispatch version tags
id: ver
if: github.event_name == 'workflow_dispatch' && inputs.version != ''
shell: bash
run: |
VER="${{ inputs.version }}"
VER="${VER#v}" # strip optional leading 'v'
VER="${VER#v}"
echo "version=$VER" >> "$GITHUB_OUTPUT"
echo "major_minor=$(echo "$VER" | cut -d. -f1-2)" >> "$GITHUB_OUTPUT"
echo "major_minor=$(echo $VER | cut -d. -f1-2)" >> "$GITHUB_OUTPUT"

- name: Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/scitrera/${{ env.GATEWAY_IMAGE }}
scitrera/${{ env.GATEWAY_IMAGE }}
ghcr.io/scitrera/aether
scitrera/aether
tags: |
type=sha
type=raw,value=latest,enable={{is_default_branch}}
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=raw,value=${{ steps.imgver.outputs.version }},enable=${{ steps.imgver.outputs.version != '' }}
type=raw,value=${{ steps.imgver.outputs.major_minor }},enable=${{ steps.imgver.outputs.major_minor != '' }}
type=raw,value=${{ steps.ver.outputs.version }},enable=${{ steps.ver.outputs.version != '' }}
type=raw,value=${{ steps.ver.outputs.major_minor }},enable=${{ steps.ver.outputs.major_minor != '' }}
type=raw,value=latest,enable=${{ steps.ver.outputs.version != '' }}

- name: Build and push gateway
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
Expand All @@ -88,11 +99,10 @@ jobs:
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max

build-aetherlite:
name: Build aetherlite (QEMU multi-arch)
runs-on: ubuntu-latest
needs: build-gateway
if: github.event_name != 'pull_request'
needs: [ build-aether ]
permissions:
contents: read
packages: write
Expand All @@ -111,12 +121,20 @@ jobs:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Install uv
uses: astral-sh/setup-uv@v9.0.0

- name: Read image version from versions.yaml
id: imgver
run: |
VER=$(uvx --from 'scitrera-repo-tools==0.1.17' sync-versions --print-version aether-gateway)
echo "version=$VER" >> "$GITHUB_OUTPUT"
echo "major_minor=$(echo $VER | cut -d. -f1-2)" >> "$GITHUB_OUTPUT"

- name: Compute workflow_dispatch version tags
id: ver
Expand All @@ -126,46 +144,48 @@ jobs:
VER="${{ inputs.version }}"
VER="${VER#v}"
echo "version=$VER" >> "$GITHUB_OUTPUT"
echo "major_minor=$(echo "$VER" | cut -d. -f1-2)" >> "$GITHUB_OUTPUT"
echo "major_minor=$(echo $VER | cut -d. -f1-2)" >> "$GITHUB_OUTPUT"

- name: Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/scitrera/${{ env.LITE_IMAGE }}
scitrera/${{ env.LITE_IMAGE }}
ghcr.io/scitrera/aetherlite
scitrera/aetherlite
tags: |
type=sha
type=raw,value=latest,enable={{is_default_branch}}
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=raw,value=${{ steps.imgver.outputs.version }},enable=${{ steps.imgver.outputs.version != '' }}
type=raw,value=${{ steps.imgver.outputs.major_minor }},enable=${{ steps.imgver.outputs.major_minor != '' }}
type=raw,value=${{ steps.ver.outputs.version }},enable=${{ steps.ver.outputs.version != '' }}
type=raw,value=${{ steps.ver.outputs.major_minor }},enable=${{ steps.ver.outputs.major_minor != '' }}
type=raw,value=latest,enable=${{ steps.ver.outputs.version != '' }}

- name: Build and push aetherlite
- name: Build and push
uses: docker/build-push-action@v6
with:
context: server
file: server/Dockerfile.aetherlite-dev
platforms: linux/amd64,linux/arm64
push: true
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BASE_IMAGE=ghcr.io/scitrera/${{ env.GATEWAY_IMAGE }}:${{ needs.build-gateway.outputs.base-tag }}
BASE_IMAGE=ghcr.io/scitrera/aether:${{ needs.build-aether.outputs.base-tag }}
cache-from: type=gha
cache-to: type=gha,mode=max


build-aetherlite-dev:
name: Build aetherlite-dev (QEMU multi-arch)
runs-on: ubuntu-latest
needs: build-aetherlite
if: github.event_name != 'pull_request'
needs: [ build-aetherlite ]
permissions:
contents: read
packages: write
outputs:
base-tag: ${{ steps.meta.outputs.version }}
steps:
- uses: actions/checkout@v6

Expand All @@ -179,12 +199,20 @@ jobs:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Install uv
uses: astral-sh/setup-uv@v9.0.0

- name: Read image version from versions.yaml
id: imgver
run: |
VER=$(uvx --from 'scitrera-repo-tools==0.1.17' sync-versions --print-version aether-gateway)
echo "version=$VER" >> "$GITHUB_OUTPUT"
echo "major_minor=$(echo $VER | cut -d. -f1-2)" >> "$GITHUB_OUTPUT"

- name: Compute workflow_dispatch version tags
id: ver
Expand All @@ -194,45 +222,37 @@ jobs:
VER="${{ inputs.version }}"
VER="${VER#v}"
echo "version=$VER" >> "$GITHUB_OUTPUT"
echo "major_minor=$(echo "$VER" | cut -d. -f1-2)" >> "$GITHUB_OUTPUT"
echo "major_minor=$(echo $VER | cut -d. -f1-2)" >> "$GITHUB_OUTPUT"

- name: Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/scitrera/${{ env.LITE_IMAGE }}
scitrera/${{ env.LITE_IMAGE }}
# aetherlite is a development-only image (hardcodes AETHER_ALLOW_DEV_MODE=true
# and --insecure-admin); tag with a `dev-` prefix so it can never be mistaken
# for a production-grade release artifact.
#
# `flavor.latest=false` disables docker/metadata-action's default behavior
# of auto-injecting an UNPREFIXED `latest` tag on default-branch pushes /
# semver matches. Without this, the auto-`latest` from this dev build would
# overwrite the production aetherlite:latest produced by the build-aetherlite
# job above. The explicit `dev-latest` tags below cover the latest semantic
# for the dev image.
flavor: |
latest=false
ghcr.io/scitrera/aetherlite
scitrera/aetherlite
tags: |
type=sha,prefix=dev-
type=raw,value=dev-latest
type=semver,pattern={{version}},prefix=dev-
type=semver,pattern={{major}}.{{minor}},prefix=dev-
type=raw,value=dev-${{ steps.imgver.outputs.version }},enable=${{ steps.imgver.outputs.version != '' }}
type=raw,value=dev-${{ steps.imgver.outputs.major_minor }},enable=${{ steps.imgver.outputs.major_minor != '' }}
type=raw,value=dev-${{ steps.ver.outputs.version }},enable=${{ steps.ver.outputs.version != '' }}
type=raw,value=dev-${{ steps.ver.outputs.major_minor }},enable=${{ steps.ver.outputs.major_minor != '' }}
flavor: |
latest=false

- name: Build and push aetherlite
- name: Build and push
uses: docker/build-push-action@v6
with:
context: server
file: server/Dockerfile.aetherlite-dev
platforms: linux/amd64,linux/arm64
push: true
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BASE_IMAGE=ghcr.io/scitrera/${{ env.LITE_IMAGE }}:${{ needs.build-aetherlite.outputs.base-tag }}
BASE_IMAGE=ghcr.io/scitrera/aetherlite:${{ needs.build-aetherlite.outputs.base-tag }}
cache-from: type=gha
cache-to: type=gha,mode=max
Loading
Loading