ainsleydev/webkit

GitHub: ainsleydev/webkit

将 `app.json` 清单转换为自动化 IaC 与 CI/CD 的全栈 Web 框架。

Stars: 1 | Forks: 0

WebKit

Infrastructure-as-code framework for full-stack web applications

文档 · 快速开始 · 示例 ·

[![Go Report Card](https://goreportcard.com/badge/github.com/ainsleydev/webkit)](https://goreportcard.com/report/github.com/ainsleydev/webkit) [![Release](https://img.shields.io/github/v/release/ainsleydev/webkit?color=brightgreen&label=Release)](https://github.com/ainsleydev/webkit/releases) [![Maintainability](https://api.codeclimate.com/v1/badges/f5912a1dec11b8003850/maintainability)](https://codeclimate.com/github/ainsleydev/webkit/maintainability) [![Coverage](https://codecov.io/gh/ainsleydev/webkit/branch/main/graph/badge.svg)](https://codecov.io/gh/ainsleydev/webkit) ![Made with Go](https://img.shields.io/badge/Made%20with-Go-00ADD8.svg?logo=go) [![Go Reference](https://pkg.go.dev/badge/github.com/ainsleydev/webkit.svg)](https://pkg.go.dev/github.com/ainsleydev/webkit) [![License](https://img.shields.io/github/license/ainsleydev/webkit?color=orange)](https://github.com/ainsleydev/webkit/blob/main/LICENSE) [![ainsley.dev](https://img.shields.io/badge/-ainsley.dev-black?style=flat&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5wEYDzUGL1b35AAABA1JREFUWMPtlttvFVUUxn977ZnZu+W0tLalqRovBAUvQag0xNQbpSIosSSIJC198YknJfHJxDf9A/DBJ0x8MbFACjVqvCASq6FYFLFBvJAaAomkFCmhHGpLO+PDzOmZzpn2nKP4pCs5ycmevb7vW99as/fA//FfD1XO5p1nzuA3NWJHx5T8cVkRBPHHQfRjd0tzyZhOOQIy27bAxET9zCuvvhY0r2kC/OiRABeAN4BL/4oDr9+3lGszPs7UVNfUE23v3Nj5koszR/8N4EXg3XJckFIFuCLUuU7GWNNtTg25cu4syJx0F+gGMuU4UJKAt1Yux1UKV6TVat1qs+OYwQESMwDQCjwKsOv4iZsnwGihwbiuEek2WjJGhMrvv0UujYKa08VFkQvuTXNgz6oVeCIo1CqrZYMRwTiaytERKn44kRQAsAFYDbBrsLgLRQU0GI919TXKiHQaUQ1GBCuCCQKqjg/MqInrM4lZrgc6A1CljHhRAZ4Ip65m77FaOmbJdehC5vzZr1RAf/T6x6NDwb3/uAVfP74GnwCjZasRuXuWXASj9XQme+3t6erqPcB0IvUuYCsUH8YFBRhRNBqvyYpsn0MeOnG6wvc/9x33MPBjSvp24Na/7cDP7Y/gKIURecZoeTBObkSwWg7UNjaOeFfGLgK9KRAPAM8Wc2FeAUaEWtddbEV2WBFtREXkCqvlghE5yOQkvucBHAR+T0BooAtYXLYDI5sewxWFJ/Kk1bI2UTlW5DMFp03+JPwJ+DQFai2wbiEXUgVUas0trmuslm4jUmGi/tuwDVmrpafBuNPVrs7N/wzQA2QTUJbwYLIlOxB0tOGJ4IhqsSJts+T54Rv0lBz1RFh9ZJA385fOAHAshaMNaAF4OcWFQgeUwhMlrlJdnqjaOLkR8Y2WvbWec9VIQeo4sJf8FZ2LmmgWJO1cmm8I7wc2a6XwosGL+v+rFfnYUYplh47Obo5dvZ8Av6TgbSZ8KxYWEGxZn/u7Dbg9t8HNnwF9S2qqzqVUn4vzQF/K+m3AC1A4jGlId0QC8l0BXKVGrahe//okNR99WZAUc6EXuJiC+zxw57wOxKp/DliRAvCFKDUkxS+YIeBwyvryCHuOC0kH6oBOCj/V/gTeA6aK0oefZj3ARGJdRdh1BQ7Eqm8HHk4B/Q7oB1B9acWFEWtDf5STjGbgqbgLcQcqCQ8NL5EUAPuBsRKqz8UVYB+F97QXcSyatSXoWJ8zvB04AFQlkoaBp4HhhaqPR1TdUsLjeVni8TjhVX0odCAkd4AdKeQAHxIwXEb1Odt+Az5IeVQVcTmhgDBWAhtTNl8G9qGAwKfU2N3SnJvi/RFGMjYCD8UFdACNKRsHgZMA6v0j5ZpAlPtNyvqSiJO/AKik60y0ALlUAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTAxLTI0VDE1OjUzOjA2KzAwOjAwm5vntAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wMS0yNFQxNTo1MzowNiswMDowMOrGXwgAAABXelRYdFJhdyBwcm9maWxlIHR5cGUgaXB0YwAAeJzj8gwIcVYoKMpPy8xJ5VIAAyMLLmMLEyMTS5MUAxMgRIA0w2QDI7NUIMvY1MjEzMQcxAfLgEigSi4A6hcRdPJCNZUAAAAASUVORK5CYII=)](https://ainsley.dev) [![Twitter Handle](https://img.shields.io/twitter/follow/ainsleydev)](https://twitter.com/ainsleydev)
## WebKit WebKit 是一个将单个 `app.json` 清单转换为生产级基础设施和 CI/CD 管线的 CLI 工具。它会生成 Terraform 配置、GitHub Actions 工作流以及项目文件——所有这些都不会在项目仓库中引入基础设施代码。 **关键特性:** - **单一数据源**:在 `app.json` 中定义应用、资源与环境 - **干净的仓库**:无需 `infra/` 文件夹——工作流包含一切 - **基础设施即代码**:自动化的 Terraform 生成与集中式模块 - **密钥管理**:内置 SOPS/Age 加密,支持环境专属解密 - **CI/CD 自动化**:用于计划、部署与漂移检测的 GitHub Actions 工作流 - **开发者体验**:支持幂等更新、本地测试与零配置默认值 ## 包管理 - ![npm](https://img.shields.io/npm/v/@ainsleydev/payload-helper?label=@ainsleydev/payload-helper&logo=npm&style=badge) - ![npm](https://img.shields.io/npm/v/@ainsleydev/eslint-config?label=@ainsleydev/eslint-config&logo=npm&style=badge) - ![npm](https://img.shields.io/npm/v/@ainsleydev/prettier-config?label=@ainsleydev/prettier-config&logo=npm&style=badge) ## 安装 **快速安装:** ``` curl -sSL https://raw.githubusercontent.com/ainsleydev/webkit/main/bin/install.sh | sh ``` 或从 [最新发布版本](https://github.com/ainsleydev/webkit/releases/latest) 下载二进制文件。 **验证安装:** ``` webkit version ``` ## 开发环境搭建 运行以下命令以配置 `webkit` 环境。 ``` make setup ``` ### 前置条件 - **Go** 1.23 或更高版本 - **pnpm**(用于任务运行器与本地工作流测试) - **act**(用于本地测试 GitHub Actions) - **age**(用于密钥加密) ### 项目结构 ``` webkit/ ├── cmd/webkit/ # CLI entry point ├── internal/ │ ├── appdef/ # App manifest parsing and validation │ ├── cmd/ # CLI command implementations │ │ ├── cicd/ # GitHub Actions workflow generation │ │ ├── env/ # Environment variable management │ │ ├── docs/ # Documentation generation │ │ ├── files/ # Project file generation │ │ ├── infra/ # Terraform infrastructure commands │ │ └── secrets/ # SOPS encryption/decryption │ ├── infra/ # Terraform wrapper and state management │ ├── manifest/ # File tracking and manifest source tagging │ ├── scaffold/ # Template scaffolding system │ ├── secrets/ # SOPS/Age integration │ ├── templates/ # Embedded project templates │ └── util/ # Shared utilities └── platform/ # Terraform modules (separate infra repository) ├── providers/ # Provider-specific modules (DO, B2, etc.) └── modules/ # Orchestration modules (apps, resources) ``` ### 架构概述 **关键组件:** - **appdef**:定义 `app.json` 结构并处理反序列化与校验 - **scaffold**:模板渲染引擎,支持文件跟踪与幂等更新 - **manifest**:追踪哪些文件由生成及其来源(应用/资源/项目) - **secrets**:SOPS 集成,用于加密/解密环境变量 - **infra**:Terraform 封装,管理状态与 tfvars 生成 ## 本地工作流测试 你可以使用 [act](https://github.com/nektos/act) 在本地模拟 GitHub Actions 工作流。`act` 会在本地运行,读取当前工作目录中的文件(包括所有未提交的更改)。 ``` # 测试 lint 工作流 pnpm act:lint # 测试 test 工作流 pnpm act:test # Dry-run 发布工作流(显示将要运行的内容而不执行) pnpm act:release ``` ## 发布 *仅维护者使用* WebKit 使用 [GoReleaser](https://goreleaser.com/) 进行自动化发布。发布流程通过创建并推送 Git 标签触发。 ### 快速发布 使用交互式标签工具: ``` pnpm tag ``` 它将引导你完成以下步骤: 1. 选择创建或删除标签 2. 选择版本提升类型(`patch`、`minor` 或 `major`) 3. 确认版本号 4. 创建并推送标签 推送标签后,版本号会被注入,随后 GitHub Actions 会自动触发 GoReleaser 工作流,为各平台构建二进制文件并创建附带二进制文件的 GitHub 发布。 ### 语义化版本管理 WebKit 遵循 [语义化版本控制](https://semver.org/)。 - **补丁版本**(v1.0.1):错误修复与微小变更 - **次要版本**(v1.1.0):新功能,向后兼容 - **主版本**(v2.0.0):破坏性变更 ## 发布 npm 包 WebKit 使用 [Changesets](https://github.com/changesets/changesets) 实现自动化包版本管理与发布。在 `packages/` 目录中合并变更时,创建 changeset 以记录变更并指定版本提升类型。详见 [packages/README.md](packages/README.md)。 ## 版权 除非获得我们明确的书面许可,否则不得分发或以商业方式利用本仓库中的内容或任何书面文本。也不得 传输 或以任何其他形式在网站或其他电子检索系统中存储。 任何形式的全部或部分内容分发均被禁止,但以下情况除外: - 你可以将内容下载或打印到本地硬盘,仅用于个人和非商业用途 - 你可以将内容复制给单个第三方,仅用于个人用途,但必须标明 网站 作为内容来源, ## 许可证 代码版权 2023 ainsley.dev。代码根据 [BSD-3 Clause](LICENSE) 发布。
标签:EVTX分析, Go语言, Runtime Enforcement, Syscall, Web开发, Web框架, 云端部署, 代码覆盖率, 全栈应用, 前端构建, 单文件清单, 可维护性, 应用清单, 开发者文档, 开源框架, 快速启动, 持续交付, 持续集成, 搜索引擎优化, 文档驱动开发, 日志审计, 模块化开发, 模板引擎, 版本发布, 特权提升, 生产环境准备, 程序破解, 自动化部署, 静态站点生成