diver-osint-ctf/challenge_dependencies
GitHub: diver-osint-ctf/challenge_dependencies
将 CTF 挑战仓库中的题目依赖关系自动解析并可视化为 Mermaid 有向图,支持本地和 CI 环境运行。
Stars: 0 | Forks: 0
# 挑战依赖
将 CTF 挑战依赖可视化为 Mermaid 图表。支持本地和 GitHub Actions 环境运行。
## 安装说明
```
make build
```
## 使用说明
```
# 仅分析当前分支
./bin/challenge-deps --repo ./testdata
# 比较两个分支
./bin/challenge-deps --repo ./testdata --base main --head feature-branch
```
### 选项
- `--repo`:挑战仓库路径(必填)
- `--base`:基础分支(可选,需配合 --head 使用)
- `--head`:目标分支(可选,需配合 --base 使用)
- `--format`:输出格式:`markdown`、`mermaid`、`summary`(默认:`markdown`)
- `--direction`:图表方向:`LR`、`TB`、`RL`、`BT`(默认:`LR`)
## 挑战格式
参见 [测试数据](./testdata)
## 输出示例
```
graph LR
challenge-2 --> challenge-1
challenge-3 --> challenge-1
challenge-4 --> challenge-2
challenge-4 --> challenge-3
```
## GitHub Actions
```
name: Check Dependencies
on:
pull_request:
branches: [main]
issue_comment:
types:
- created
permissions:
contents: read
pull-requests: write
issues: write
jobs:
analyze:
if: |
github.event_name == 'pull_request' ||
(
github.event_name == 'issue_comment' &&
github.event.issue.pull_request &&
contains(github.event.comment.body, '@github deps') &&
(
github.event.comment.author_association == 'MEMBER' ||
github.event.comment.author_association == 'OWNER' ||
github.event.comment.author_association == 'COLLABORATOR'
)
)
runs-on: ubuntu-latest
steps:
- name: Set PR info
run: |
if [[ "${EVENT_NAME}" == "pull_request" ]]; then
echo "BRANCH_NAME=${PR_HEAD_REF}" >> $GITHUB_ENV
echo "BASE_REF=${PR_BASE_REF}" >> $GITHUB_ENV
else
BRANCH_NAME=$(gh pr view "${ISSUE_NUMBER}" --json headRefName --jq .headRefName --repo "${REPO}")
BASE_REF=$(gh pr view "${ISSUE_NUMBER}" --json baseRefName --jq .baseRefName --repo "${REPO}")
echo "BRANCH_NAME=${BRANCH_NAME}" >> $GITHUB_ENV
echo "BASE_REF=${BASE_REF}" >> $GITHUB_ENV
fi
env:
GH_TOKEN: ${{ github.token }}
EVENT_NAME: ${{ github.event_name }}
PR_HEAD_REF: ${{ github.event.pull_request.head.ref }}
PR_BASE_REF: ${{ github.base_ref }}
ISSUE_NUMBER: ${{ github.event.issue.number }}
REPO: ${{ github.repository }}
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ env.BRANCH_NAME }}
fetch-depth: 0 # Required for branch comparison
- name: Fetch base branch
run: git fetch origin "${BASE_REF}"
- name: Analyze dependencies
id: deps
uses: diver-osint-ctf/challenge_dependencies@220be8bdabaa9c72ef782cb49beb7bdfa674cb44 # v1.2.0
with:
repo: "."
base: "origin/${{ env.BASE_REF }}"
head: "HEAD"
- name: Comment PR
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GRAPH_OUTPUT: ${{ steps.deps.outputs.graph }}
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: process.env.GRAPH_OUTPUT
});
```
标签:EVTX分析, GitHub Actions, Linux安全, Mermaid, WebSocket, 依赖分析, 可视化工具, 日志审计, 自动笔记, 防御加固