Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
f50bfce
feat: helm charts and local k8s
SgtPooki Dec 16, 2025
7435eba
fix: better runtime config of vite backend
SgtPooki Dec 17, 2025
642758d
fix: web has proper health check endpoint
SgtPooki Dec 17, 2025
06789c6
fix: redeploy command for dx sugar when making changes
SgtPooki Dec 17, 2025
6c01ccd
fix: add liveness probes to local postgres
SgtPooki Dec 17, 2025
31db572
fix: use specific sha for dorny/paths-filter
SgtPooki Dec 17, 2025
625a474
fix: cleanup github workflows
SgtPooki Dec 17, 2025
dfa80de
chore: ignore .env files
SgtPooki Dec 17, 2025
9a70efe
fix: postgres names dont exceed 63 characters
SgtPooki Dec 17, 2025
ce9ede5
fix: remove filoz-infra specifics
SgtPooki Dec 18, 2025
8e2e364
fix: remove helm, use Kustomize
SgtPooki Dec 18, 2025
819834e
test: ensure kind cluster is tested before build
SgtPooki Dec 18, 2025
48688f8
chore: fix lint
SgtPooki Dec 18, 2025
4ccff24
tmp: temporarily build docker images for this PR branch
SgtPooki Dec 18, 2025
db1edc9
test: fix k8s cluster test
SgtPooki Dec 18, 2025
c138335
test: exclude k8s test from regular e2e test runs
SgtPooki Dec 18, 2025
93fd086
chore: fix docker-build yaml
SgtPooki Dec 18, 2025
071c2b3
chore: fix docker-build yaml
SgtPooki Dec 18, 2025
16cc2f0
chore: fix k8s ci test
SgtPooki Dec 18, 2025
33025fc
chore: fix k8s ci test
SgtPooki Dec 18, 2025
241a47d
chore: add logging to investigate k8s ci failure
SgtPooki Dec 18, 2025
be74a0c
chore: add logging to investigate k8s ci failure
SgtPooki Dec 18, 2025
d54fae6
fix: dealbot scheduler can be disabled
SgtPooki Dec 18, 2025
9d6708e
test: optimize caching of docker & pnpm during k8s test
SgtPooki Dec 18, 2025
7f53dc0
test: ensure test:e2e:k8s can find the k8s test file
SgtPooki Dec 18, 2025
2596f4f
test: composite docker build action that re-uses built containers
SgtPooki Dec 19, 2025
76e57ab
chore: fix lint
SgtPooki Dec 19, 2025
b519a58
Merge branch 'main' into feat/helm-charts
SgtPooki Jan 7, 2026
12290bf
Update DEVELOPMENT.md
SgtPooki Jan 8, 2026
94b124e
Update DEVELOPMENT.md
SgtPooki Jan 8, 2026
5a2be3d
Update docs/infra.md
SgtPooki Jan 8, 2026
12f606a
Update docs/infra.md
SgtPooki Jan 8, 2026
5c3ae62
Update docs/infra.md
SgtPooki Jan 8, 2026
5f4fd67
Update docs/infra.md
SgtPooki Jan 8, 2026
39b55f5
chore: filozone/infra -> FilOzone/infra
SgtPooki Jan 8, 2026
4f28bfa
fix: manifest usage explanation
SgtPooki Jan 8, 2026
a788d2a
docs: we will be using argoCD not flux
SgtPooki Jan 8, 2026
76ab1f4
Update docs/infra.md
SgtPooki Jan 8, 2026
5f1b682
chore: link to ingress manifests
SgtPooki Jan 8, 2026
e5f2c47
chore: remove hotfix documentation
SgtPooki Jan 8, 2026
990ff88
docs: add info about only web or backend releases
SgtPooki Jan 8, 2026
5f6cc93
docs: link to src instead of inline code in docs
SgtPooki Jan 8, 2026
4a3b4f2
Update docs/release-process.md
SgtPooki Jan 9, 2026
07fe911
docs: reduce duplication and link to code
SgtPooki Jan 9, 2026
108b72d
docs: move DEVELOPMENT.md to docs folder
SgtPooki Jan 9, 2026
156e193
docs: infra doc overhaul
SgtPooki Jan 9, 2026
513df91
fix: remove unnecessary annotations
SgtPooki Jan 13, 2026
11bc271
fix: remove unnecessary ServiceAccount
SgtPooki Jan 13, 2026
f69a32f
chore: move postgres out of base kustomize
SgtPooki Jan 13, 2026
4e2e2b7
Update .github/workflows/docker-build.yml
SgtPooki Jan 13, 2026
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
12 changes: 12 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
## Root local development secrets
#
# This file is used by `make secret` to create a Kubernetes Secret for local Kind dev.
# Keep this file limited to *secrets only* - non-secret configuration lives in
# kustomize ConfigMap patches (e.g., kustomize/overlays/local/backend-configmap-local.yaml).
#
# Required
WALLET_ADDRESS=
WALLET_PRIVATE_KEY=
#
# Optional (only if using an external DB or a non-default password)
# DATABASE_PASSWORD=
76 changes: 76 additions & 0 deletions .github/actions/docker-build/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: docker-build
description: Build a Docker image with BuildKit + GHA cache (optionally push or load).

inputs:
context:
description: Docker build context
required: false
default: .
file:
description: Path to Dockerfile
required: true
tags:
description: Newline-separated image tags
required: true
platforms:
description: Target platforms (only relevant when pushing)
required: false
default: linux/amd64
push:
description: Push image to registry
required: false
default: "false"
load:
description: Load image into local Docker daemon
required: false
default: "false"
cache-scope:
description: Scope key for GHA build cache
required: true
setup-buildx:
description: Whether to set up docker buildx
required: false
default: "true"
login:
description: Whether to login to a registry
required: false
default: "false"
registry:
description: Registry hostname for login
required: false
default: ghcr.io
username:
description: Registry username for login
required: false
default: ""
password:
description: Registry password/token for login
required: false
default: ""

runs:
using: composite
steps:
- name: Set up Docker Buildx
if: inputs.setup-buildx == 'true'
uses: docker/setup-buildx-action@v3

- name: Login to registry
if: inputs.login == 'true'
uses: docker/login-action@v3
with:
registry: ${{ inputs.registry }}
username: ${{ inputs.username }}
password: ${{ inputs.password }}

- name: Build image
uses: docker/build-push-action@v6
with:
context: ${{ inputs.context }}
file: ${{ inputs.file }}
tags: ${{ inputs.tags }}
push: ${{ inputs.push }}
load: ${{ inputs.load }}
cache-from: type=gha,scope=${{ inputs.cache-scope }}
cache-to: type=gha,mode=max,scope=${{ inputs.cache-scope }}
platforms: ${{ inputs.platforms }}
78 changes: 78 additions & 0 deletions .github/workflows/docker-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: Build and Push Docker Images

on:
push:
branches:
- main

concurrency:
group: docker-build-${{ github.ref }}
cancel-in-progress: true

env:
REGISTRY: ghcr.io

jobs:
detect-changes:
runs-on: ubuntu-latest
outputs:
backend: ${{ steps.filter.outputs.backend }}
web: ${{ steps.filter.outputs.web }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Check for changes
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: filter
with:
filters: |
backend:
- 'apps/backend/**'
- 'pnpm-lock.yaml'
- 'pnpm-workspace.yaml'
web:
- 'apps/web/**'
- 'pnpm-lock.yaml'
- 'pnpm-workspace.yaml'

integration-test:
needs: detect-changes
if: needs.detect-changes.outputs.backend == 'true' || needs.detect-changes.outputs.web == 'true'
uses: ./.github/workflows/reusable-k8s-test.yml

build-backend:
needs: [detect-changes, integration-test]
if: needs.detect-changes.outputs.backend == 'true'
permissions:
contents: read
packages: write
uses: ./.github/workflows/reusable-docker-build.yml
with:
app: backend
dockerfile: apps/backend/Dockerfile
image: filozone/dealbot-backend
tags: |
ghcr.io/filozone/dealbot-backend:sha-${{ github.sha }}
ghcr.io/filozone/dealbot-backend:sha-${{ github.run_number }}-${{ github.sha }}
summary: |
echo "backend image (sha): ghcr.io/filozone/dealbot-backend:sha-${{ github.sha }}"
echo "backend image (ordered): ghcr.io/filozone/dealbot-backend:sha-${{ github.run_number }}-${{ github.sha }}"

build-web:
needs: [detect-changes, integration-test]
if: needs.detect-changes.outputs.web == 'true'
permissions:
contents: read
packages: write
uses: ./.github/workflows/reusable-docker-build.yml
with:
app: web
dockerfile: apps/web/Dockerfile
image: filozone/dealbot-web
tags: |
ghcr.io/filozone/dealbot-web:sha-${{ github.sha }}
ghcr.io/filozone/dealbot-web:sha-${{ github.run_number }}-${{ github.sha }}
summary: |
echo "web image (sha): ghcr.io/filozone/dealbot-web:sha-${{ github.sha }}"
echo "web image (ordered): ghcr.io/filozone/dealbot-web:sha-${{ github.run_number }}-${{ github.sha }}"
104 changes: 104 additions & 0 deletions .github/workflows/hotfix-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
name: Hotfix Release

on:
push:
branches:
- 'hotfix/**'

permissions:
contents: write
pull-requests: write

env:
REGISTRY: ghcr.io

jobs:
hotfix-release:
runs-on: ubuntu-latest
outputs:
releases_created: ${{ steps.release.outputs.releases_created }}
backend_release_created: ${{ steps.release.outputs['apps/backend--release_created'] }}
backend_tag_name: ${{ steps.release.outputs['apps/backend--tag_name'] }}
backend_version: ${{ steps.release.outputs['apps/backend--version'] }}
backend_sha: ${{ steps.release.outputs['apps/backend--sha'] }}
web_release_created: ${{ steps.release.outputs['apps/web--release_created'] }}
web_tag_name: ${{ steps.release.outputs['apps/web--tag_name'] }}
web_version: ${{ steps.release.outputs['apps/web--version'] }}
web_sha: ${{ steps.release.outputs['apps/web--sha'] }}
steps:
- uses: googleapis/release-please-action@v4
id: release
with:
config-file: release-please-config.json
manifest-file: .release-please-manifest.json
target-branch: ${{ github.ref_name }}

hotfix-build-matrix:
needs: hotfix-release
runs-on: ubuntu-latest
outputs:
has_items: ${{ steps.set-matrix.outputs.has_items }}
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Build matrix
id: set-matrix
shell: bash
run: |
set -euo pipefail

include='[]'

if [[ "${{ needs.hotfix-release.outputs.backend_release_created }}" == "true" ]]; then
include="$(jq -c \
--arg app "backend" \
--arg dockerfile "apps/backend/Dockerfile" \
--arg image "filozone/dealbot-backend" \
--arg sha "${{ needs.hotfix-release.outputs.backend_sha }}" \
--arg version "${{ needs.hotfix-release.outputs.backend_version }}" \
'. + [{app: $app, dockerfile: $dockerfile, image: $image, sha: $sha, version: $version}]' \
<<<"$include")"
fi

if [[ "${{ needs.hotfix-release.outputs.web_release_created }}" == "true" ]]; then
include="$(jq -c \
--arg app "web" \
--arg dockerfile "apps/web/Dockerfile" \
--arg image "filozone/dealbot-web" \
--arg sha "${{ needs.hotfix-release.outputs.web_sha }}" \
--arg version "${{ needs.hotfix-release.outputs.web_version }}" \
'. + [{app: $app, dockerfile: $dockerfile, image: $image, sha: $sha, version: $version}]' \
<<<"$include")"
fi

matrix="$(jq -c --argjson include "$include" '{include: $include}' <<<"{}")"
echo "matrix=$matrix" >>"$GITHUB_OUTPUT"

if [[ "$include" == "[]" ]]; then
echo "has_items=false" >>"$GITHUB_OUTPUT"
else
echo "has_items=true" >>"$GITHUB_OUTPUT"
fi

# Build hotfix images immediately
build-hotfix:
needs:
- hotfix-release
- hotfix-build-matrix
if: needs.hotfix-build-matrix.outputs.has_items == 'true'
permissions:
contents: read
packages: write
strategy:
matrix: ${{ fromJSON(needs.hotfix-build-matrix.outputs.matrix) }}
uses: ./.github/workflows/reusable-docker-build.yml
with:
app: ${{ matrix.app }}
dockerfile: ${{ matrix.dockerfile }}
image: ${{ matrix.image }}
ref: ${{ matrix.sha }}
tags: |
${{ env.REGISTRY }}/${{ matrix.image }}:v${{ matrix.version }}
${{ env.REGISTRY }}/${{ matrix.image }}:hotfix-${{ matrix.sha }}
summary: |
echo "🚨 HOTFIX DEPLOYED: ${{ matrix.app }} v${{ matrix.version }}"
echo "Image: ${{ env.REGISTRY }}/${{ matrix.image }}:v${{ matrix.version }}"
101 changes: 101 additions & 0 deletions .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: Release Please

on:
workflow_run:
workflows: ["Build and Push Docker Images"]
types:
- completed
branches:
- main
workflow_dispatch:
inputs:
note:
description: "Optional note for why this run was triggered manually."
required: false
type: string

permissions:
contents: write
pull-requests: write

jobs:
release-please:
runs-on: ubuntu-latest
# Only run automatically if the image build workflow succeeded; manual runs skip this gate.
if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success'
outputs:
releases_created: ${{ steps.release.outputs.releases_created }}
backend_release_created: ${{ steps.release.outputs['apps/backend--release_created'] }}
backend_tag_name: ${{ steps.release.outputs['apps/backend--tag_name'] }}
backend_version: ${{ steps.release.outputs['apps/backend--version'] }}
backend_sha: ${{ steps.release.outputs['apps/backend--sha'] }}
web_release_created: ${{ steps.release.outputs['apps/web--release_created'] }}
web_tag_name: ${{ steps.release.outputs['apps/web--tag_name'] }}
web_version: ${{ steps.release.outputs['apps/web--version'] }}
web_sha: ${{ steps.release.outputs['apps/web--sha'] }}
steps:
- uses: googleapis/release-please-action@v4
id: release
with:
config-file: release-please-config.json
manifest-file: .release-please-manifest.json

retag-backend:
needs: release-please
if: needs.release-please.outputs.backend_release_created == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Retag backend image
run: |
SOURCE_SHA="${{ needs.release-please.outputs.backend_sha }}"
VERSION="${{ needs.release-please.outputs.backend_version }}"
REPO="ghcr.io/filozone/dealbot-backend"

echo "Retagging ${REPO}:sha-${SOURCE_SHA} → ${REPO}:v${VERSION}"

# Use docker buildx imagetools to create a new tag pointing to the same image
docker buildx imagetools create \
--tag "${REPO}:v${VERSION}" \
"${REPO}:sha-${SOURCE_SHA}"

echo "✅ Backend released: v${VERSION}"

retag-web:
needs: release-please
if: needs.release-please.outputs.web_release_created == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Retag web image
run: |
SOURCE_SHA="${{ needs.release-please.outputs.web_sha }}"
VERSION="${{ needs.release-please.outputs.web_version }}"
REPO="ghcr.io/filozone/dealbot-web"

echo "Retagging ${REPO}:sha-${SOURCE_SHA} → ${REPO}:v${VERSION}"

# Use docker buildx imagetools to create a new tag pointing to the same image
docker buildx imagetools create \
--tag "${REPO}:v${VERSION}" \
"${REPO}:sha-${SOURCE_SHA}"

echo "✅ Web released: v${VERSION}"
Loading