Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
0f44091
🎨 Palette: Add confirmation dialog for delete action
mendsec Jun 27, 2026
44db7b6
Add confirmation dialog for delete and ARIA labels for icon buttons
mendsec Jun 28, 2026
42bbe96
refactor(app): structural sanitation and database/diff migration
mendsec Jul 17, 2026
a5a83bf
feat(app): implement Scan Profiles and Host Details drawer
mendsec Jul 17, 2026
94fdebd
ci: enforce develop branch policy and PR rules on main
mendsec Jul 18, 2026
ac84186
chore(agents): expand AGENTS.md with full ecosystem context
mendsec Jul 18, 2026
0bbe5e6
fix(history): address code review feedback on WCAG label and export a…
mendsec Jul 21, 2026
9675da5
merge: resolve merge conflicts with origin/develop
mendsec Jul 21, 2026
038aad7
Merge pull request #106 from catnet-io/palette-delete-confirmation-12…
mendsec Jul 21, 2026
d769bec
docs: clarify cross-platform desktop and mobile scope
mendsec Jul 21, 2026
be040f2
Merge branch 'develop' into palette/ux-a11y-improvements-661717991036…
mendsec Jul 23, 2026
aa01dd6
chore(agents): add strict rule enforcing bun package manager
mendsec Jul 23, 2026
1bb49c0
ci(github): add bun setup and frontend build step before go vet
mendsec Jul 23, 2026
5e85d3f
fix(frontend): handle async onClick promises safely and fix AGENTS.md…
mendsec Jul 23, 2026
1d56acc
build(deps): bump golang/govulncheck-action from 1.0.4 to 1.1.0 (#108)
mendsec Jul 23, 2026
27c72d7
fix(security): update golang.org/x/net from 0.54.0 to 0.55.0
mendsec Jul 23, 2026
8455518
Merge pull request #113 from catnet-io/fix/aikido-security-update-pac…
mendsec Jul 23, 2026
b7edcb7
chore(ci): update actions/setup-go to v7.0.0 pinned by SHA
mendsec Jul 23, 2026
8e6bc1e
fix(app): resolve Codacy review issues and add handler tests
mendsec Jul 23, 2026
f38471b
fix(ci): support SSH commit signature validation in PR Rules Enforcer
mendsec Jul 23, 2026
29e5d63
style(frontend): apply Codacy block statement and void operator sugge…
mendsec Jul 23, 2026
a91294f
fix(ci): fix checkout steps in govulncheck and snyk workflows
mendsec Jul 23, 2026
e337a61
fix(ci): match required status check context name Snyk
mendsec Jul 23, 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
48 changes: 48 additions & 0 deletions .github/workflows/auto-merge-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Auto Merge PR (develop → main)

on:
push:
branches: [develop]
workflow_dispatch:

permissions: {}

jobs:
open-pr:
runs-on: ubuntu-latest
if: github.actor != 'github-actions[bot]'
permissions:
contents: write
pull-requests: write

steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0

- name: Create Pull Request
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh pr create \
--base main \
--head develop \
--title "chore: merge develop → main" \
--body "Automated PR by github-actions[bot]." || \
echo "PR already exists, skipping."

- name: Request review and enable auto-merge
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
PR_NUMBER=$(gh pr list --head develop --base main --json number -q '.[0].number' 2>/dev/null || echo "")
if [ -n "$PR_NUMBER" ]; then
gh pr edit "$PR_NUMBER" --add-reviewer mendsec 2>/dev/null || \
echo "Could not request review."

# Enforce merge strategy to prevent squash, which causes develop to diverge
gh pr merge "$PR_NUMBER" --merge --auto 2>/dev/null || \
echo "Could not enable auto-merge. Ensure 'Allow merge commits' is enabled in repo settings."

echo "PR #$PR_NUMBER updated. Waiting for review from mendsec."
fi
17 changes: 14 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: CI

on:
push:
branches: [main]
branches: [main, develop]
pull_request:
branches: [main]
branches: [main, develop]

permissions:
contents: read
Expand All @@ -21,7 +21,7 @@ jobs:
- uses: actions/checkout@v4

- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v5
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: ${{ matrix.go-version }}
cache: true
Expand All @@ -37,6 +37,17 @@ jobs:
fi
echo "✓ No local replace directives"

- name: Set up Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: latest

- name: Build frontend assets
run: |
cd frontend
bun install
bun run build

- name: Vet
run: go vet ./...

Expand Down
31 changes: 8 additions & 23 deletions .github/workflows/govulncheck.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
name: Govulncheck

permissions:
contents: read

on:
push:
branches: [ "main", "develop" ]
Expand All @@ -18,29 +15,17 @@ jobs:
govulncheck:
runs-on: ubuntu-latest
steps:
- name: Checkout app
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
path: app
- name: Checkout repository
uses: actions/checkout@v4

- name: Checkout engine
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up Go
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
repository: catnet-io/engine
path: engine

- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libwebkit2gtk-4.0-dev || true

- name: Mock frontend dist
shell: bash
working-directory: app
run: mkdir -p frontend/dist; echo "mock" > frontend/dist/index.html

go-version: '1.26.x'
cache: true

- name: Run govulncheck
uses: golang/govulncheck-action@b625fbe08f3bccbe446d94fbf87fcc875a4f50ee # v1
uses: golang/govulncheck-action@032d45514ae346b1db93c04b0c90b841c370344f # v1
with:
go-version-input: '1.26.x'
go-package: ./...
work-dir: ./app
repo-checkout: false
75 changes: 75 additions & 0 deletions .github/workflows/pr-rules-enforcer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: PR Rules Enforcer

on:
pull_request:
branches: [main]

permissions:
contents: read

jobs:
enforce-rules:
name: Enforce Main Branch Rules
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Validate PR Source and Author
env:
HEAD_REF: ${{ github.event.pull_request.head.ref }}
PR_USER: ${{ github.event.pull_request.user.login }}
run: |
echo "PR HEAD ref: $HEAD_REF"
echo "PR creator: $PR_USER"

if [ "$HEAD_REF" != "develop" ]; then
echo "::error::PRs to main must only come from the 'develop' branch. Found: '$HEAD_REF'."
exit 1
fi

if [ "$PR_USER" != "github-actions[bot]" ] && [ "$PR_USER" != "app/github-actions" ]; then
echo "::error::PRs from 'develop' to 'main' must be created by 'github-actions[bot]'. Manual PRs are not allowed. Found: '$PR_USER'."
exit 1
fi

echo "✓ PR source branch and creator are valid."

- name: Validate Commit Signatures
env:
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
# Fetch main branch to check commits differences
git fetch origin main

# Configure allowed_signers for SSH signature verification on runner
mkdir -p ~/.ssh
touch ~/.ssh/allowed_signers
git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers

# Check signatures of all commits in the PR branch
echo "Checking commits signature up to: $HEAD_SHA"

HAS_UNSIGNED=0
while read -r sha sig; do
if [ -z "$sha" ]; then
continue
fi

# Check if commit object contains a gpgsig header (SSH or GPG signature)
HAS_GPGSIG=$(git cat-file -p "$sha" | grep -c "^gpgsig " || true)

if [ "$sig" = "N" ] && [ "$HAS_GPGSIG" -eq 0 ]; then
echo "::error::Commit $sha is NOT signed. All commits in a PR to main must be signed (GPG or SSH)."
HAS_UNSIGNED=1
else
echo "✓ Commit $sha has a valid signature (sig: $sig, gpgsig: $HAS_GPGSIG)"
fi
done < <(git log origin/main..$HEAD_SHA --pretty=format:"%H %G?")

if [ "$HAS_UNSIGNED" -eq 1 ]; then
exit 1
fi
echo "✓ All commits are properly signed."
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
path: engine

- name: Set up Go
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: '1.26.x'

Expand Down
25 changes: 0 additions & 25 deletions .github/workflows/reset-develop.yml

This file was deleted.

88 changes: 0 additions & 88 deletions .github/workflows/signed-merge.yml

This file was deleted.

31 changes: 8 additions & 23 deletions .github/workflows/snyk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,51 +10,36 @@ on:
branches: [ "main", "develop" ]

jobs:
snyk-go:
Snyk:
runs-on: ubuntu-latest
steps:
- name: Checkout app
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
path: app
- name: Checkout engine
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: catnet-io/engine
path: engine
- name: Checkout repository
uses: actions/checkout@v4
- name: Mock frontend dist
working-directory: app
run: mkdir -p frontend/dist; echo "mock" > frontend/dist/index.html
- name: Run Snyk to check Go vulnerabilities
uses: snyk/actions/golang@9adf32b1121593767fc3c057af55b55db032dc04 # v1.0.0
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --file=app/go.mod
args: --file=go.mod

snyk-frontend:
runs-on: ubuntu-latest
steps:
- name: Checkout app
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
path: app
- name: Checkout engine
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: catnet-io/engine
path: engine
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: latest
- name: Install dependencies
working-directory: app/frontend
working-directory: frontend
run: bun install
- name: Setup Snyk
uses: snyk/actions/setup@9adf32b1121593767fc3c057af55b55db032dc04 # v1.0.0
- name: Run Snyk to check Bun vulnerabilities
working-directory: app/frontend
working-directory: frontend
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
run: snyk test --file=package.json
Loading
Loading