Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ updates:
schedule:
interval: 'weekly'
day: 'friday'
time: '18:00'
timezone: 'Europe/Prague'
time: '16:00'
timezone: 'Etc/UTC'
assignees:
- 'vreshch'
open-pull-requests-limit: 10
Expand All @@ -20,8 +20,8 @@ updates:
schedule:
interval: 'weekly'
day: 'friday'
time: '18:00'
timezone: 'Europe/Prague'
time: '16:00'
timezone: 'Etc/UTC'
assignees:
- 'vreshch'
open-pull-requests-limit: 5
Expand Down
39 changes: 7 additions & 32 deletions .github/workflows/release-train.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,22 @@ name: Release Train
# Fully automated Friday MINOR release of @agentage/server-memory to npm. No human
# step on the happy path. Weekly cadence, always a minor bump.
#
# Level 1 (dep-driven): this package wraps @agentage/memory-core, whose own train
# releases at 20:00 Prague. This one runs at 21:00 so it can pull the fresh core.
# Level 1 (dep-driven): this package wraps @agentage/memory-core, whose own L0 train
# runs at 19:00 UTC. This one runs at 20:00 UTC so it can pull the fresh core.
# Before the version bump it upgrades every @agentage/* dependency to latest; a dep
# change ALONE justifies releasing (the whole point of L1). The frozen 6-tool
# contract means `npm run verify` against the bumped memory-core is the integration
# gate - a red verify fails the train without releasing (the PR stays open).
#
# Single UTC cron, no Prague/DST gate: a late-firing cron just means the train
# departs late, not that it gets skipped.
#
# GITHUB_TOKEN caveats handled here: its branch pushes don't fire pr-validation on
# the release PR (the in-workflow `npm run verify` plus the one in publish.yml are
# the CI gates), and its merges don't fire publish.yml's push trigger - so after
# merging, this workflow dispatches publish.yml explicitly.
on:
schedule:
# Friday 21:00 Europe/Prague, both DST offsets; the gate job filters.
- cron: '0 19 * * 5'
- cron: '0 20 * * 5'
workflow_dispatch:

Expand All @@ -27,33 +28,8 @@ permissions:
actions: write

jobs:
prague-gate:
name: 🕘 Friday 21:00 Prague gate
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
go: ${{ steps.gate.outputs.go }}
steps:
- name: Check local Prague hour (DST-proof)
id: gate
run: |
if [ "${{ github.event_name }}" != "schedule" ]; then
echo "workflow_dispatch - bypassing hour gate."
echo "go=true" >> "$GITHUB_OUTPUT"
exit 0
fi
HOUR=$(TZ=Europe/Prague date +%H)
if [ "$HOUR" = "21" ]; then
echo "go=true" >> "$GITHUB_OUTPUT"
else
echo "Prague hour is $HOUR, not 21 - wrong DST cron slot, skipping."
echo "go=false" >> "$GITHUB_OUTPUT"
fi

dependabot-quiescence:
name: 🤖 Wait for dependabot triage to finish
needs: prague-gate
if: needs.prague-gate.outputs.go == 'true'
runs-on: ubuntu-latest
timeout-minutes: 50
steps:
Expand All @@ -76,8 +52,7 @@ jobs:

release:
name: 🚝 Cut minor release
needs: [prague-gate, dependabot-quiescence]
if: needs.prague-gate.outputs.go == 'true'
needs: dependabot-quiescence
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
Expand Down Expand Up @@ -138,7 +113,7 @@ jobs:
if: steps.guard.outputs.skip != 'true'
run: |
set -euo pipefail
# L1: pull the fresh @agentage/* line (memory-core released at 20:00).
# L1: pull the fresh @agentage/* line (memory-core L0 released at 19:00 UTC).
npx --yes npm-check-updates -u --dep prod,dev --filter "@agentage/*"
npm install
if git diff --quiet -- package.json package-lock.json; then
Expand Down