文章

AI Coding:json4u更新迭代

背景

近期开发遇到xml格式化,当前网络上的xml格式化都太丑了,不够自然,所以打算在json4u的上面简单二开,部署到github上供日常使用。

原仓库信息及使用方式

仓库地址:https://github.com/boommanpro/json4u

使用方式:

  1. 直接点击编辑页面操作:https://boommanpro.github.io/json4u/editor

  2. 使用url进行传递:https://boommanpro.github.io/json4u/editor?data={"hello":"world"}

  3. 现将内容copy到剪切板,然后点击链接:https://boommanpro.github.io/json4u/editor?data=copyFromClipboard

    1. 可以结合raycast的快捷键使用。

本次迭代

请拉取远程 https://github.com/loggerhead/json4u.git ,最新的main分支,并且将代码进行merge新特性,fix冲突后先不要提交,让我确认

代码提交信息:https://github.com/boommanpro/json4u/commit/0c8b6d7eb7bd5c1e7c09098f8f0d93b28c4ef00f

学习记录

deploy迭代

Current runner version: '2.334.0'

Runner Image Provisioner

Operating System

Runner Image

GITHUB_TOKEN Permissions

Secret source: Actions

Prepare workflow directory

Prepare all required actions

Getting action download info

Download action repository 'actions/checkout@v4' (SHA:34e114876b0b11c390a56381ad16ebd13914f8d5)

Download action repository 'actions/setup-node@v4' (SHA:49933ea5288caeca8642d1e84afbd3f7d6820020)

Download action repository 'pnpm/action-setup@v2' (SHA:eae0cfeb286e66ffb5155f1a79b90583a127a68b)

Error: An action could not be found at the URI ' https://codeload.github.com/pnpm/action-setup/tar.gz/eae0cfeb286e66ffb5155f1a79b90583a127a68b ' (DC10:24B79C:1A4F02:1EC4BD:6A159604)

Error: Failed to download archive ' https://codeload.github.com/pnpm/action-setup/tar.gz/eae0cfeb286e66ffb5155f1a79b90583a127a68b ' after 1 attempts.

现在官方build失败

原因是:deploy部分依赖被封禁了,当前项目1年更新,依赖被封禁了

# GitHub Actions 构建失败问题分析与优化方案

## 问题现象

GitHub Actions 构建失败,错误信息:

```
Error: An action could not be found at the URI
'https://codeload.github.com/pnpm/action-setup/tar.gz/eae0cfeb286e66ffb5155f1a79b90583a127a68b'
Error: Failed to download archive after 1 attempts.
```

## 根因分析

- 工作流中使用了 `pnpm/action-setup@v2`,对应的 commit SHA 为 `eae0cfeb286e66ffb5155f1a79b90583a127a68b`
- 该 commit 已无法从 GitHub 正常下载(可能是仓库历史重写、分支删除或 Git 引用失效等原因)
- GitHub Actions 在下载 action 归档时失败,导致整个工作流中断

## 已应用的修复

将 `pnpm/action-setup@v2` 升级为 `pnpm/action-setup@v4`:

```yaml
# 修改前
- name: Setup pnpm
  uses: pnpm/action-setup@v2
  with:
    version: 9.12.0

# 修改后
- name: Setup pnpm
  uses: pnpm/action-setup@v4
  with:
    version: 9
```

## 进一步优化建议

### 1. 使用 commit SHA 锁定 action 版本(推荐)

使用标签引用(如 `@v4`)存在标签被移动到新 commit 的风险,建议锁定到具体 SHA:

```yaml
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
- uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af  # v4.1.0
- uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2  # v4.0.0
```

### 2. 升级 Node.js 版本

当前使用 Node 18,Node 18 的 EOL 为 2025 年 4 月,建议升级到 Node 20 或 22:

```yaml
- uses: actions/setup-node@v4
  with:
    node-version: 20
```

### 3. 启用 pnpm 缓存

利用 `actions/setup-node` 内置的 pnpm 缓存支持,加速依赖安装:

```yaml
- uses: actions/setup-node@v4
  with:
    node-version: 20
    cache: pnpm
```

### 4. 升级 deploy action 版本

`JamesIves/github-pages-deploy-action@v4.3.4` 版本较旧,建议升级:

```yaml
- uses: JamesIves/github-pages-deploy-action@v4.7.2
```

### 5. 完整优化后的工作流参考

```yaml
name: Deploy to GitHub Pages

on:
  push:
    branches: ["main"]
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      contents: write

    steps:
      - uses: actions/checkout@v4.2.2

      - uses: pnpm/action-setup@v4
        with:
          version: 9

      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: pnpm

      - name: Install dependencies
        run: pnpm install --frozen-lockfile

      - name: Build Application
        run: pnpm run build

      - name: Deploy
        uses: JamesIves/github-pages-deploy-action@v4.7.2
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          branch: gh-pages
          folder: dist
          force: true
          commit-message: website deploy

      - name: Cleanup
        run: rm -rf dist
```

> **注意**:`pnpm/action-setup` 需要在 `actions/setup-node` 之前执行,这样 `setup-node` 才能正确识别 pnpm 并启用缓存。

没有自动deploy

可以手动deploy部署