From 8155bd15e3380b1f238e88184726a34f61f7c74f Mon Sep 17 00:00:00 2001
From: Leo Wang
Date: Thu, 27 Feb 2025 02:05:46 +0800
Subject: [PATCH 1/5] feat: Add GitHub Actions and Cloudflare deployment
configuration
- Create Wrangler configuration for preview and production deployments
- Add GitHub Actions workflow for preview deployments
- Update README files with detailed deployment instructions and Cloudflare credential setup
---
.github/workflows/preview.yml | 34 ++++++++++++++++++++++++++++++++++
README.md | 25 +++++++++++++++++--------
README_zh.md | 26 ++++++++++++++++++--------
wrangler.toml | 6 ++++++
4 files changed, 75 insertions(+), 16 deletions(-)
create mode 100644 .github/workflows/preview.yml
create mode 100644 wrangler.toml
diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml
new file mode 100644
index 0000000..b60e1b2
--- /dev/null
+++ b/.github/workflows/preview.yml
@@ -0,0 +1,34 @@
+name: Deploy Preview
+
+on:
+ push:
+ branches-ignore:
+ - main
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ name: Deploy Preview
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: pnpm/action-setup@v4
+ with:
+ version: 9
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: "22"
+ cache: "pnpm"
+
+ - name: Install dependencies
+ run: pnpm install
+
+ - name: Deploy to Cloudflare Workers with Preview
+ uses: cloudflare/wrangler-action@v3
+ with:
+ apiToken: ${{ secrets.CF_API_TOKEN }}
+ command: deploy --env preview
+ env:
+ CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
diff --git a/README.md b/README.md
index 69ea880..fdacfd9 100644
--- a/README.md
+++ b/README.md
@@ -158,17 +158,26 @@ pnpm test
## Deployment
-1. Login to Cloudflare
+This project uses GitHub Actions to automatically deploy to Cloudflare Workers:
-```bash
-pnpm dlx wrangler login
-```
+- Commits to non-main branches create preview deployments
+- Commits to main branch deploy to production
-2. Deploy Worker
+### Setup GitHub Secrets
-```bash
-pnpm deploy
-```
+To enable automatic deployments, you need to add the following secrets to your GitHub repository:
+
+1. Go to your repository on GitHub
+2. Navigate to Settings > Secrets and variables > Actions
+3. Add the following secrets:
+ - `CF_API_TOKEN`: Your Cloudflare API token with Workers permissions
+
+### How to get Cloudflare credentials
+
+1. **Cloudflare API Token**:
+ - Go to the [Cloudflare dashboard](https://dash.cloudflare.com/)
+ - Navigate to My Profile > API Tokens
+ - Create a new token with "Edit Workers" permissions
## Tech Stack
diff --git a/README_zh.md b/README_zh.md
index 1a4bc06..b9ab7ec 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -158,17 +158,27 @@ pnpm test
## 部署
-1. 登录到 Cloudflare
+本项目使用 GitHub Actions 自动部署到 Cloudflare Workers:
-```bash
-pnpm dlx wrangler login
-```
+- 向非主分支提交代码会创建预览部署
+- 向主分支提交代码会部署到生产环境
-2. 部署 Worker
+### 设置 GitHub Secrets
-```bash
-pnpm deploy
-```
+要启用自动部署,您需要在 GitHub 仓库中添加以下密钥:
+
+1. 前往您的 GitHub 仓库
+2. 导航到 Settings > Secrets and variables > Actions
+3. 添加以下密钥:
+ - `CF_API_TOKEN`:您的 Cloudflare API 令牌(需要 Workers 权限)
+
+### 如何获取 Cloudflare 凭据
+
+1. **Cloudflare API 令牌**:
+
+ - 前往 [Cloudflare 控制面板](https://dash.cloudflare.com/)
+ - 导航到 My Profile > API Tokens
+ - 创建一个具有"Edit Workers"权限的新令牌
## 技术栈
diff --git a/wrangler.toml b/wrangler.toml
new file mode 100644
index 0000000..b50b3ef
--- /dev/null
+++ b/wrangler.toml
@@ -0,0 +1,6 @@
+name = "github-achievements-api"
+main = "src/index.ts"
+compatibility_date = "2025-02-27"
+
+[env.preview]
+name = "github-achievements-api-preview"
\ No newline at end of file
From 66e7d01d6b3b234930c299f37179ff3dab90e3a9 Mon Sep 17 00:00:00 2001
From: Leo Wang
Date: Thu, 27 Feb 2025 02:26:01 +0800
Subject: [PATCH 2/5] feat: Add production deployment GitHub Actions workflow
- Create deploy.yml for automatic production deployments
- Update preview.yml to include deployment URL and commit comment
- Add comment generation for deployment links in both workflows
- Update wrangler.toml with a preview environment comment
---
.github/workflows/deploy.yml | 53 +++++++++++++++++++++++++++++++++++
.github/workflows/preview.yml | 23 +++++++++++++--
wrangler.toml | 3 +-
3 files changed, 76 insertions(+), 3 deletions(-)
create mode 100644 .github/workflows/deploy.yml
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
new file mode 100644
index 0000000..fb8aaba
--- /dev/null
+++ b/.github/workflows/deploy.yml
@@ -0,0 +1,53 @@
+name: Deploy Production
+
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ name: Deploy Production
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: pnpm/action-setup@v4
+ with:
+ version: 9
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: "22"
+ cache: "pnpm"
+
+ - name: Install dependencies
+ run: pnpm install
+
+ - name: Deploy to Cloudflare Workers
+ id: deploy-production
+ uses: cloudflare/wrangler-action@v3
+ with:
+ apiToken: ${{ secrets.CF_API_TOKEN }}
+ command: deploy
+
+ - name: Get deployment URL
+ id: deployment-url
+ run: |
+ PRODUCTION_URL=$(echo '${{ steps.deploy-production.outputs.deployedUrl }}')
+ if [ -z "$PRODUCTION_URL" ]; then
+ PRODUCTION_URL="https://github-achievements-api.wangrunlin.workers.dev"
+ fi
+ echo "url=$PRODUCTION_URL" >> $GITHUB_OUTPUT
+
+ - name: Comment on commit
+ uses: peter-evans/commit-comment@v2
+ with:
+ body: |
+ 🚀 Production deployment is ready!
+
+ 🔗 [Production Link](${{ steps.deployment-url.outputs.url }})
+
+ Branch: ${{ github.ref_name }}
+ Commit: ${{ github.sha }}
diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml
index b60e1b2..ae37485 100644
--- a/.github/workflows/preview.yml
+++ b/.github/workflows/preview.yml
@@ -26,9 +26,28 @@ jobs:
run: pnpm install
- name: Deploy to Cloudflare Workers with Preview
+ id: deploy-preview
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
command: deploy --env preview
- env:
- CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
+
+ - name: Get deployment URL
+ id: deployment-url
+ run: |
+ PREVIEW_URL=$(echo '${{ steps.deploy-preview.outputs.deployedUrl }}')
+ if [ -z "$PREVIEW_URL" ]; then
+ PREVIEW_URL="https://github-achievements-api-preview.wangrunlin.workers.dev"
+ fi
+ echo "url=$PREVIEW_URL" >> $GITHUB_OUTPUT
+
+ - name: Comment on commit
+ uses: peter-evans/commit-comment@v2
+ with:
+ body: |
+ 🚀 Preview deployment is ready!
+
+ 🔗 [Preview Link](${{ steps.deployment-url.outputs.url }})
+
+ Branch: ${{ github.ref_name }}
+ Commit: ${{ github.sha }}
diff --git a/wrangler.toml b/wrangler.toml
index b50b3ef..735f3a1 100644
--- a/wrangler.toml
+++ b/wrangler.toml
@@ -3,4 +3,5 @@ main = "src/index.ts"
compatibility_date = "2025-02-27"
[env.preview]
-name = "github-achievements-api-preview"
\ No newline at end of file
+name = "github-achievements-api-preview"
+# Asegúrate de que el entorno de vista previa tenga la misma configuración que el entorno principal
\ No newline at end of file
From cbbc84dcbb190f5bdfe59cf24cabf45d3b6383aa Mon Sep 17 00:00:00 2001
From: Leo Wang
Date: Thu, 27 Feb 2025 02:30:13 +0800
Subject: [PATCH 3/5] chore: Update GitHub Actions commit comment action to v3
---
.github/workflows/deploy.yml | 2 +-
.github/workflows/preview.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index fb8aaba..07d5000 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -42,7 +42,7 @@ jobs:
echo "url=$PRODUCTION_URL" >> $GITHUB_OUTPUT
- name: Comment on commit
- uses: peter-evans/commit-comment@v2
+ uses: peter-evans/commit-comment@v3
with:
body: |
🚀 Production deployment is ready!
diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml
index ae37485..fdb7659 100644
--- a/.github/workflows/preview.yml
+++ b/.github/workflows/preview.yml
@@ -42,7 +42,7 @@ jobs:
echo "url=$PREVIEW_URL" >> $GITHUB_OUTPUT
- name: Comment on commit
- uses: peter-evans/commit-comment@v2
+ uses: peter-evans/commit-comment@v3
with:
body: |
🚀 Preview deployment is ready!
From d7213083acffe1bec7069d1c88f34996caf799b6 Mon Sep 17 00:00:00 2001
From: Leo Wang
Date: Thu, 27 Feb 2025 02:53:37 +0800
Subject: [PATCH 4/5] chore: Simplify GitHub Actions deployment workflows
---
.github/workflows/deploy.yml | 21 ---------------------
.github/workflows/preview.yml | 21 ---------------------
wrangler.toml | 3 +--
3 files changed, 1 insertion(+), 44 deletions(-)
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 07d5000..7d36e41 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -26,28 +26,7 @@ jobs:
run: pnpm install
- name: Deploy to Cloudflare Workers
- id: deploy-production
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
command: deploy
-
- - name: Get deployment URL
- id: deployment-url
- run: |
- PRODUCTION_URL=$(echo '${{ steps.deploy-production.outputs.deployedUrl }}')
- if [ -z "$PRODUCTION_URL" ]; then
- PRODUCTION_URL="https://github-achievements-api.wangrunlin.workers.dev"
- fi
- echo "url=$PRODUCTION_URL" >> $GITHUB_OUTPUT
-
- - name: Comment on commit
- uses: peter-evans/commit-comment@v3
- with:
- body: |
- 🚀 Production deployment is ready!
-
- 🔗 [Production Link](${{ steps.deployment-url.outputs.url }})
-
- Branch: ${{ github.ref_name }}
- Commit: ${{ github.sha }}
diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml
index fdb7659..58515eb 100644
--- a/.github/workflows/preview.yml
+++ b/.github/workflows/preview.yml
@@ -26,28 +26,7 @@ jobs:
run: pnpm install
- name: Deploy to Cloudflare Workers with Preview
- id: deploy-preview
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
command: deploy --env preview
-
- - name: Get deployment URL
- id: deployment-url
- run: |
- PREVIEW_URL=$(echo '${{ steps.deploy-preview.outputs.deployedUrl }}')
- if [ -z "$PREVIEW_URL" ]; then
- PREVIEW_URL="https://github-achievements-api-preview.wangrunlin.workers.dev"
- fi
- echo "url=$PREVIEW_URL" >> $GITHUB_OUTPUT
-
- - name: Comment on commit
- uses: peter-evans/commit-comment@v3
- with:
- body: |
- 🚀 Preview deployment is ready!
-
- 🔗 [Preview Link](${{ steps.deployment-url.outputs.url }})
-
- Branch: ${{ github.ref_name }}
- Commit: ${{ github.sha }}
diff --git a/wrangler.toml b/wrangler.toml
index 735f3a1..fc6ea76 100644
--- a/wrangler.toml
+++ b/wrangler.toml
@@ -3,5 +3,4 @@ main = "src/index.ts"
compatibility_date = "2025-02-27"
[env.preview]
-name = "github-achievements-api-preview"
-# Asegúrate de que el entorno de vista previa tenga la misma configuración que el entorno principal
\ No newline at end of file
+name = "github-achievements-api-preview"
\ No newline at end of file
From b7be5dd0d7e7d975e92490402a1ad94f5631640e Mon Sep 17 00:00:00 2001
From: Leo Wang
Date: Thu, 27 Feb 2025 03:05:34 +0800
Subject: [PATCH 5/5] docs: Update README files with improved link references
and TypeScript version
---
README.md | 116 +++++++++++++++++++++++++--------------------------
README_zh.md | 116 +++++++++++++++++++++++++--------------------------
2 files changed, 116 insertions(+), 116 deletions(-)
diff --git a/README.md b/README.md
index fdacfd9..e4ae9e6 100644
--- a/README.md
+++ b/README.md
@@ -4,31 +4,31 @@
-[][1]
-[][2]
-[][3]
-[][4]
-[][5]
-[][6]
-[][7]
-[][8]
-[][9]
-[][10]
-[][11]
-[][12]
-[][13]
-
-English | [简体中文][14]
+[][license]
+[][package-json]
+[][commits]
+[][actions]
+[][nodejs]
+[][typescript]
+[][prettier]
+[][make-pr]
+[][stars]
+[][forks]
+[][issues]
+[][repo]
+[][kofi]
+
+English | [简体中文][readme-zh]
A simple API service for retrieving GitHub user achievements information. Built with Cloudflare Workers.
## Live Demo
-- [https://github-achievements-api.wangrunlin.workers.dev][15]
+- [https://github-achievements-api.wangrunlin.workers.dev][demo]
## Deploy to Cloudflare Workers
-[][16]
+[][deploy]
## Features
@@ -123,13 +123,13 @@ Example error response:
Support this project by becoming a sponsor. Your logo will show up here with a link to your website.
-[][17]
+[][kofi-button]
-[Other sponsorship options][18]
+[Other sponsorship options][sponsor]
## Who's using GitHub Achievements API?
-Are you using this API? [Let us know][19] and we'll add your logo here!
+Are you using this API? [Let us know][new-issue] and we'll add your logo here!
## Local Development
@@ -202,13 +202,13 @@ Issues and Pull Requests are welcome!
## Author
-[Leo Wang][20]
+[Leo Wang][author]
## Available Achievements
Here are all the achievements currently available on GitHub:
-[View more details about GitHub Achievements][21]
+[View more details about GitHub Achievements][github-achievements]
| Achievement | Name | Description | Max Tiers |
| -------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------- | --------- |
@@ -226,39 +226,39 @@ Here are all the achievements currently available on GitHub:
Thanks to these awesome projects and resources:
-- [GitHub][22] - For providing the achievement system
-- [Cloudflare Workers][23] - For the serverless platform
-- [GitHub Achievements List][24] - For the comprehensive achievements documentation
-- [TypeScript][25] - For the typed JavaScript
-- [Vitest][26] - For the testing framework
-- [Wrangler][27] - For the development & deployment tool
-- [pnpm][28] - For the fast package manager
-
-[1]: https://github.com/wangrunlin/github-achievements-api/blob/main/LICENSE
-[2]: https://github.com/wangrunlin/github-achievements-api/blob/main/package.json
-[3]: https://github.com/wangrunlin/github-achievements-api/commits
-[4]: https://github.com/wangrunlin/github-achievements-api/actions
-[5]: https://nodejs.org
-[6]: https://www.typescriptlang.org/
-[7]: https://github.com/prettier/prettier
-[8]: https://makeapullrequest.com
-[9]: https://github.com/wangrunlin/github-achievements-api/stargazers
-[10]: https://github.com/wangrunlin/github-achievements-api/network
-[11]: https://github.com/wangrunlin/github-achievements-api/issues
-[12]: https://github.com/wangrunlin/github-achievements-api
-[13]: https://ko-fi.com/wangrunlin
-[14]: README_zh.md
-[15]: https://github-achievements-api.wangrunlin.workers.dev
-[16]: https://deploy.workers.cloudflare.com/?url=https://github.com/wangrunlin/github-achievements-api
-[17]: https://ko-fi.com/wangrunlin
-[18]: https://alin.run/sponsor
-[19]: https://github.com/wangrunlin/github-achievements-api/issues/new
-[20]: https://github.com/wangrunlin
-[21]: https://github.com/drknzz/GitHub-Achievements
-[22]: https://github.com
-[23]: https://workers.cloudflare.com
-[24]: https://github.com/drknzz/GitHub-Achievements
-[25]: https://www.typescriptlang.org
-[26]: https://vitest.dev
-[27]: https://developers.cloudflare.com/workers/wrangler/
-[28]: https://pnpm.io
+- [GitHub][github] - For providing the achievement system
+- [Cloudflare Workers][cloudflare-workers] - For the serverless platform
+- [GitHub Achievements List][github-achievements-list] - For the comprehensive achievements documentation
+- [TypeScript][typescript-site] - For the typed JavaScript
+- [Vitest][vitest] - For the testing framework
+- [Wrangler][wrangler] - For the development & deployment tool
+- [pnpm][pnpm] - For the fast package manager
+
+[license]: https://github.com/wangrunlin/github-achievements-api/blob/main/LICENSE
+[package-json]: https://github.com/wangrunlin/github-achievements-api/blob/main/package.json
+[commits]: https://github.com/wangrunlin/github-achievements-api/commits
+[actions]: https://github.com/wangrunlin/github-achievements-api/actions
+[nodejs]: https://nodejs.org
+[typescript]: https://www.typescriptlang.org/
+[prettier]: https://github.com/prettier/prettier
+[make-pr]: https://makeapullrequest.com
+[stars]: https://github.com/wangrunlin/github-achievements-api/stargazers
+[forks]: https://github.com/wangrunlin/github-achievements-api/network
+[issues]: https://github.com/wangrunlin/github-achievements-api/issues
+[repo]: https://github.com/wangrunlin/github-achievements-api
+[kofi]: https://ko-fi.com/wangrunlin
+[readme-zh]: README_zh.md
+[demo]: https://github-achievements-api.wangrunlin.workers.dev
+[deploy]: https://deploy.workers.cloudflare.com/?url=https://github.com/wangrunlin/github-achievements-api
+[kofi-button]: https://ko-fi.com/wangrunlin
+[sponsor]: https://alin.run/sponsor
+[new-issue]: https://github.com/wangrunlin/github-achievements-api/issues/new
+[author]: https://github.com/wangrunlin
+[github-achievements]: https://github.com/drknzz/GitHub-Achievements
+[github]: https://github.com
+[cloudflare-workers]: https://workers.cloudflare.com
+[github-achievements-list]: https://github.com/drknzz/GitHub-Achievements
+[typescript-site]: https://www.typescriptlang.org
+[vitest]: https://vitest.dev
+[wrangler]: https://developers.cloudflare.com/workers/wrangler/
+[pnpm]: https://pnpm.io
diff --git a/README_zh.md b/README_zh.md
index b9ab7ec..0254c32 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -4,31 +4,31 @@
-[][1]
-[][2]
-[][3]
-[][4]
-[][5]
-[][6]
-[][7]
-[][8]
-[][9]
-[][10]
-[][11]
-[][12]
-[][13]
-
-[English][14] | 简体中文
+[][license]
+[][package-json]
+[][commits]
+[][actions]
+[][nodejs]
+[][typescript]
+[][prettier]
+[][make-pr]
+[][stars]
+[][forks]
+[][issues]
+[][repo]
+[][kofi]
+
+[English][readme-en] | 简体中文
一个简单的 API 服务,用于获取 GitHub 用户的成就信息。基于 Cloudflare Workers 构建。
## 在线使用
-- [https://github-achievements-api.wangrunlin.workers.dev][15]
+- [https://github-achievements-api.wangrunlin.workers.dev][demo]
## 部署到 Cloudflare Workers
-[][16]
+[][deploy]
## 功能特点
@@ -123,13 +123,13 @@ GET https://.workers.dev/wangrunlin
成为赞助商来支持这个项目。您的 logo 将会出现在这里并链接到您的网站。
-[][17]
+[][kofi-button]
-[其他赞助方式][18]
+[其他赞助方式][sponsor]
## 谁在使用 GitHub Achievements API?
-您正在使用这个 API 吗?[告诉我们][19],我们会在这里添加您的 logo!
+您正在使用这个 API 吗?[告诉我们][new-issue],我们会在这里添加您的 logo!
## 本地开发
@@ -203,13 +203,13 @@ MIT
## 作者
-[Leo Wang][20]
+[Leo Wang][author]
## 可获得的成就
以下是目前 GitHub 上可获得的所有成就:
-[查看更多 GitHub 成就相关信息][21]
+[查看更多 GitHub 成就相关信息][github-achievements]
| 成就图标 | 名称 | 描述 | 最高等级 |
| -------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | --------------------------------------- | -------- |
@@ -227,39 +227,39 @@ MIT
感谢这些优秀的项目和资源:
-- [GitHub][22] - 提供成就系统
-- [Cloudflare Workers][23] - 提供无服务器平台
-- [GitHub Achievements List][24] - 提供完整的成就文档
-- [TypeScript][25] - 提供类型化的 JavaScript
-- [Vitest][26] - 提供测试框架
-- [Wrangler][27] - 提供开发和部署工具
-- [pnpm][28] - 提供快速的包管理器
-
-[1]: https://github.com/wangrunlin/github-achievements-api/blob/main/LICENSE
-[2]: https://github.com/wangrunlin/github-achievements-api/blob/main/package.json
-[3]: https://github.com/wangrunlin/github-achievements-api/commits
-[4]: https://github.com/wangrunlin/github-achievements-api/actions
-[5]: https://nodejs.org
-[6]: https://www.typescriptlang.org/
-[7]: https://github.com/prettier/prettier
-[8]: https://makeapullrequest.com
-[9]: https://github.com/wangrunlin/github-achievements-api/stargazers
-[10]: https://github.com/wangrunlin/github-achievements-api/network
-[11]: https://github.com/wangrunlin/github-achievements-api/issues
-[12]: https://github.com/wangrunlin/github-achievements-api
-[13]: https://ko-fi.com/wangrunlin
-[14]: README.md
-[15]: https://github-achievements-api.wangrunlin.workers.dev
-[16]: https://deploy.workers.cloudflare.com/?url=https://github.com/wangrunlin/github-achievements-api
-[17]: https://ko-fi.com/wangrunlin
-[18]: https://alin.run/sponsor
-[19]: https://github.com/wangrunlin/github-achievements-api/issues/new
-[20]: https://github.com/wangrunlin
-[21]: https://github.com/drknzz/GitHub-Achievements
-[22]: https://github.com
-[23]: https://workers.cloudflare.com
-[24]: https://github.com/drknzz/GitHub-Achievements
-[25]: https://www.typescriptlang.org
-[26]: https://vitest.dev
-[27]: https://developers.cloudflare.com/workers/wrangler/
-[28]: https://pnpm.io
+- [GitHub][github] - 提供成就系统
+- [Cloudflare Workers][cloudflare-workers] - 提供无服务器平台
+- [GitHub Achievements List][github-achievements-list] - 提供完整的成就文档
+- [TypeScript][typescript-site] - 提供类型化的 JavaScript
+- [Vitest][vitest] - 提供测试框架
+- [Wrangler][wrangler] - 提供开发和部署工具
+- [pnpm][pnpm] - 提供快速的包管理器
+
+[license]: https://github.com/wangrunlin/github-achievements-api/blob/main/LICENSE
+[package-json]: https://github.com/wangrunlin/github-achievements-api/blob/main/package.json
+[commits]: https://github.com/wangrunlin/github-achievements-api/commits
+[actions]: https://github.com/wangrunlin/github-achievements-api/actions
+[nodejs]: https://nodejs.org
+[typescript]: https://www.typescriptlang.org/
+[prettier]: https://github.com/prettier/prettier
+[make-pr]: https://makeapullrequest.com
+[stars]: https://github.com/wangrunlin/github-achievements-api/stargazers
+[forks]: https://github.com/wangrunlin/github-achievements-api/network
+[issues]: https://github.com/wangrunlin/github-achievements-api/issues
+[repo]: https://github.com/wangrunlin/github-achievements-api
+[kofi]: https://ko-fi.com/wangrunlin
+[readme-en]: README.md
+[demo]: https://github-achievements-api.wangrunlin.workers.dev
+[deploy]: https://deploy.workers.cloudflare.com/?url=https://github.com/wangrunlin/github-achievements-api
+[kofi-button]: https://ko-fi.com/wangrunlin
+[sponsor]: https://alin.run/sponsor
+[new-issue]: https://github.com/wangrunlin/github-achievements-api/issues/new
+[author]: https://github.com/wangrunlin
+[github-achievements]: https://github.com/drknzz/GitHub-Achievements
+[github]: https://github.com
+[cloudflare-workers]: https://workers.cloudflare.com
+[github-achievements-list]: https://github.com/drknzz/GitHub-Achievements
+[typescript-site]: https://www.typescriptlang.org
+[vitest]: https://vitest.dev
+[wrangler]: https://developers.cloudflare.com/workers/wrangler/
+[pnpm]: https://pnpm.io