Skip to content

Commit 040e381

Browse files
committed
fix: get package in CI/CD
1 parent 16a5df7 commit 040e381

File tree

2 files changed

+54
-25
lines changed

2 files changed

+54
-25
lines changed

.github/workflows/deploy-pages.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ permissions:
1212
contents: read
1313
pages: write
1414
id-token: write
15+
packages: read # <-- 添加此行以允许读取 GitHub Packages
1516

1617
# 只允许一个并发部署,新的部署会取消正在进行的部署
1718
concurrency:
@@ -30,9 +31,12 @@ jobs:
3031
with:
3132
node-version: '20'
3233
cache: 'yarn'
34+
registry-url: 'https://npm.pkg.github.com' # <-- 指向 GitHub Packages 注册表
3335

3436
- name: Install dependencies
3537
run: yarn install --frozen-lockfile
38+
env:
39+
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # <-- 使用 GITHUB_TOKEN 进行认证
3640

3741
- name: Build for GitHub Pages
3842
run: yarn build:pages

docs/07-optional-backend-integration.md

Lines changed: 50 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@
4848

4949
### **1. 前端仓库配置**
5050

51-
#### **1.1 创建个人访问令牌(PAT)**
51+
#### **1.1 创建个人访问令牌(PAT)- 用于本地开发**
5252

5353
1. 前往您的 GitHub **Settings** -> **Developer settings** -> **Personal access tokens**。
5454
2. 生成一个新令牌(classic token),并至少勾选 **`read:packages`** 权限。
5555
3. **立即保存好您的令牌**,因为关闭页面后您将无法再次查看它。
5656

57-
#### **1.2 配置`.npmrc`**
57+
#### **1.2 配置`.npmrc` - 用于本地开发**
5858

5959
在您的前端项目根目录下(与`package.json`同级)创建一个名为 `.npmrc` 的文件。这个文件会告诉Yarn去哪里寻找 `@<您的GitHub用户名>` 作用域下的包,并提供认证。
6060

@@ -70,44 +70,69 @@
7070
> echo ".npmrc" >> .gitignore
7171
> ```
7272
73-
#### **1.3 安装契约包**
73+
#### **1.3 安装与使用**
7474
7575
一切准备就绪后,使用 `yarn` 安装后端的类型契约包:
7676
```bash
7777
yarn add @<您的GitHub用户名>/basic-web-game-backend-contract@latest
7878
```
79-
`@latest` 标签可以确保您总是获取最新版本的类型定义
79+
现在,您可以在项目的任何地方导入和使用后端定义的类型
8080

81-
#### **1.4 在代码中使用类型**
81+
---
8282

83-
现在,您可以在项目的任何地方导入和使用后端定义的类型,享受完整的IDE自动补全和类型检查。
83+
### **2. CI/CD 环境配置 (例如 GitHub Actions)**
8484

85-
```typescript
86-
// src/services/api.ts
87-
import type { AppRouter } from '@<您的GitHub用户名>/basic-web-game-backend-contract';
88-
import { createTRPCProxyClient, httpBatchLink } from '@trpc/client';
85+
您的本地 `.npmrc` 文件被 `.gitignore` 忽略,不会提交到仓库,因此在 CI/CD 环境(如 GitHub Actions)中,您需要另一种方式来认证。
8986

90-
// 这是一个使用tRPC的示例,但类型可以用于任何HTTP客户端
91-
export const trpc = createTRPCProxyClient<AppRouter>({
92-
links: [
93-
httpBatchLink({
94-
url: 'http://localhost:3000', // 您的后端地址
95-
}),
96-
],
97-
});
87+
我们通过修改 GitHub Actions 工作流文件 `.github/workflows/deploy-pages.yml` 来实现:
88+
89+
```yaml
90+
# .github/workflows/deploy-pages.yml
9891

99-
// 现在您可以安全地调用后端过程
100-
// const user = await trpc.user.get.query({ id: '1' });
101-
// `user` 将拥有完整的类型信息
92+
# ... (其他配置)
93+
94+
permissions:
95+
contents: read
96+
pages: write
97+
id-token: write
98+
packages: read # 1. 授予读取包的权限
99+
100+
jobs:
101+
build:
102+
runs-on: ubuntu-latest
103+
steps:
104+
- name: Checkout
105+
uses: actions/checkout@v4
106+
107+
- name: Setup Node.js
108+
uses: actions/setup-node@v4
109+
with:
110+
node-version: '20'
111+
cache: 'yarn'
112+
registry-url: 'https://npm.pkg.github.com' # 2. 指向 GitHub Packages
113+
114+
- name: Install dependencies
115+
run: yarn install --frozen-lockfile
116+
env:
117+
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # 3. 使用 GITHUB_TOKEN 进行认证
118+
119+
# ... (后续步骤)
102120
```
121+
**关键改动解释**
122+
123+
1. **`permissions: packages: read`**: 这行授予了工作流内置的 `GITHUB_TOKEN` 读取您的 GitHub Packages 的权限。
124+
2. **`registry-url: 'https://npm.pkg.github.com'`**: 在 `setup-node` 步骤中,这行告诉 Node.js 和 Yarn,默认的包注册中心是 GitHub Packages。
125+
3. **`env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}`**: 在 `Install dependencies` 步骤中,这行将 `GITHUB_TOKEN` 作为环境变量 `NODE_AUTH_TOKEN` 注入。Yarn/npm 会自动使用这个令牌来向 GitHub Packages 进行身份验证。
126+
127+
通过以上配置,您的自动化工作流现在也能够成功拉取私有包了。
103128

104129
---
105130

106-
### **2. 后端仓库配置(供参考)**
131+
### **3. 后端仓库配置(供参考)**
107132

108133
> **注意**:以下是后端仓库 (`Basic-Web-Game-Backend`) 需要进行的配置,以便能够成功发布类型包。作为前端开发人员,您通常不需要执行这些步骤,但了解它们有助于排查问题。
109134
110-
#### **2.1 修改`package.json`**
135+
#### **3.1 修改`package.json`**
111136
后端的 `package.json` 需要被配置成一个作用域包,并指向生成的类型文件。
112137
```json
113138
// Backend's package.json
@@ -125,7 +150,7 @@ export const trpc = createTRPCProxyClient<AppRouter>({
125150
}
126151
```
127152

128-
#### **2.2 调整`tsconfig.json`**
153+
#### **3.2 调整`tsconfig.json`**
129154
后端的 `tsconfig.json` 必须启用 `declaration` 选项来生成 `.d.ts` 类型声明文件。
130155
```json
131156
// Backend's tsconfig.json
@@ -137,7 +162,7 @@ export const trpc = createTRPCProxyClient<AppRouter>({
137162
}
138163
```
139164

140-
#### **2.3 创建GitHub Actions工作流**
165+
#### **3.3 创建GitHub Actions工作流**
141166
后端仓库中会有一个GitHub Actions工作流 (`.github/workflows/publish-contract.yml`),用于在代码推送到 `main` 分支时自动构建和发布包。
142167

143168
```yaml

0 commit comments

Comments
 (0)