Skip to content

github 中 action 使用

GitHub Actions GitHub 推出的持续集成服务,GitHub 把抓取代码/测试/登录远程服务器/发布/部署项目等操作称之为 actions。

关于 GITHUB_TOKEN

在每个工作流作业开始时,GitHub 会自动创建唯一的 GITHUB_TOKEN 机密以在工作流中使用。 可以使用 GITHUB_TOKEN 在工作流作业中进行身份验证。令牌的权限仅限于包含您的工作流程的仓库

管理个人访问令牌

使用 GitHub API 或命令行时,可使用 Personal access token 替代密码向 GitHub 进行身份验证。

部署代码到另一个仓库(以 vitepress 为例)

yml
name: Deploy

on:
  push:
    branches: ['main']

jobs:
  build:
    env:
      DIST: docs/.vitepress/dist
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Build
        run: npm i && npm run build
      - name: Commit
        run: |
          cd ${{env.DIST}}
          git init
          git checkout -b dist
          git config --local user.email "xxx"
          git config --local user.name "xxx"
          git add .
          git commit -a -m "auto deploy"
      - name: Deploy
        uses: ad-m/github-push-action@master
        with:
          github_token: ${{ secrets.PUSH_TOKEN }}
          repository: xxx
          force: true
          branch: xxx
          directory: ${{env.DIST}}

问题

如何避免每次 npm 都安装依赖

官方文档 - 缓存依赖项以加快工作流程

使用 cache 操作将尝试根据你提供 key 的还原缓存。当操作找到与键完全匹配的缓存时,该操作会将缓存的文件还原到你配置的 path。 可以选择提供在 key 与现有缓存不匹配时要使用的 restore-keys 列表。

cache 操作的输入参数:

  • key:必要。保存缓存时创建的密钥和用于搜索缓存的密钥。 它可以是变量、上下文值、静态字符串和函数的任何组合。 密钥最大长度为 512 个字符,密钥长度超过最大长度将导致操作失败。
  • path:必要。运行器上用于缓存或还原的路径。
  • restore-keys:可选。包含备用还原键的字符串,每个还原键均放置在一个新行上。 如果 key 没有发生缓存命中,则按照提供的顺序依次使用这些还原键来查找和还原缓存。

使用 cache 操作的示例

yaml
name: Caching with npm
on: push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Cache node modules
        id: cache-npm
        uses: actions/cache@v3
        env:
          cache-name: cache-node-modules
        with:
          # npm cache files are stored in `~/.npm` on Linux/macOS
          path: ~/.npm
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-
            ${{ runner.os }}-build-
            ${{ runner.os }}-

      - if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
        name: List the state of node modules
        continue-on-error: true
        run: npm list

      - name: Install dependencies
        run: npm install

      - name: Build
        run: npm run build

      - name: Test
        run: npm test

参考资料

Released under the MIT License.