{"id":15659759,"url":"https://github.com/jaywcjlove/github-actions","last_synced_at":"2025-06-28T14:32:36.376Z","repository":{"id":38790025,"uuid":"273908203","full_name":"jaywcjlove/github-actions","owner":"jaywcjlove","description":"测试 GitHub Actions ","archived":false,"fork":false,"pushed_at":"2024-06-25T16:38:04.000Z","size":236,"stargazers_count":25,"open_issues_count":1,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-30T14:27:29.195Z","etag":null,"topics":["actions","github-actions"],"latest_commit_sha":null,"homepage":"https://jaywcjlove.github.io/github-actions","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jaywcjlove.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"ko_fi":"jaywcjlove","buy_me_a_coffee":"jaywcjlove","custom":["https://www.paypal.me/kennyiseeyou","https://jaywcjlove.github.io/#/sponsor"]}},"created_at":"2020-06-21T13:19:28.000Z","updated_at":"2025-04-18T19:43:47.000Z","dependencies_parsed_at":"2023-01-22T02:31:18.825Z","dependency_job_id":"2fdf70d7-5eb9-49b1-9da4-be379de3ae1f","html_url":"https://github.com/jaywcjlove/github-actions","commit_stats":{"total_commits":146,"total_committers":4,"mean_commits":36.5,"dds":0.136986301369863,"last_synced_commit":"e21405ee28febbfcf4152f72548433928f1c58c1"},"previous_names":[],"tags_count":64,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaywcjlove%2Fgithub-actions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaywcjlove%2Fgithub-actions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaywcjlove%2Fgithub-actions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaywcjlove%2Fgithub-actions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jaywcjlove","download_url":"https://codeload.github.com/jaywcjlove/github-actions/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252417568,"owners_count":21744631,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actions","github-actions"],"created_at":"2024-10-03T13:18:47.562Z","updated_at":"2025-05-05T19:52:41.410Z","avatar_url":"https://github.com/jaywcjlove.png","language":"JavaScript","funding_links":["https://ko-fi.com/jaywcjlove","https://buymeacoffee.com/jaywcjlove","https://www.paypal.me/kennyiseeyou","https://jaywcjlove.github.io/#/sponsor"],"categories":[],"sub_categories":[],"readme":"\u003c!--idoc:ignore:start--\u003e\nGithub Actions\n===\n\u003c!--idoc:ignore:end--\u003e\n\n\u003c!--idoc:config:\ntitle: Github Actions\nsite: Github Actions\neditButton: \n  label: Edit this page on GitHub\n  url: https://github.com/jaywcjlove/github-actions/blob/master/\nfooter: |\n  Released under the MIT License. Copyright © 2022 Kenny Wong\u003cbr /\u003e\n  Generated by \u003ca href=\"https://github.com/jaywcjlove/idoc\" target=\"_blank\"\u003eidoc\u003c/a\u003e v{{idocVersion}}\n--\u003e\n\n[![Buy me a coffee](https://img.shields.io/badge/Buy%20me%20a%20coffee-048754?logo=buymeacoffee)](https://jaywcjlove.github.io/#/sponsor)\n\n测试 GitHub 工作流，一些比较特殊的玩儿法。\n\n\u003c!--idoc:ignore:start--\u003e\n## 目录\n\n\u003c!-- TOC --\u003e\n\n- [基本概念](#基本概念)\n  - [配置文件](#配置文件)\n  - [多项任务](#多项任务)\n  - [多项任务依赖关系](#多项任务依赖关系)\n  - [指定每项任务的虚拟机环境](#指定每项任务的虚拟机环境)\n  - [一个工作流完成触发另外一个工作流](#一个工作流完成触发另外一个工作流)\n- [常用实例](#常用实例)\n  - [获取版本信息](#获取版本信息)\n  - [获取是否存在 Tag](#获取是否存在-tag)\n  - [修改 package.json](#修改-packagejson)\n  - [提交到 gh-pages 分支](#提交到-gh-pages-分支)\n  - [克隆带有 Submodule 的仓库](#克隆带有-submodule-的仓库)\n  - [步骤依赖作业](#步骤依赖作业)\n  - [步骤作业文件共享](#步骤作业文件共享)\n  - [提交 NPM 包](#提交-npm-包)\n  - [提交 docker 镜像](#提交-docker-镜像)\n  - [提交 commit 到 master 分支](#提交-commit-到-master-分支)\n  - [Node.js](#nodejs)\n  - [同步 Gitee](#同步-gitee)\n- [环境变量](#环境变量)\n  - [默认环境变量](#默认环境变量)\n  - [自定义环境变量](#自定义环境变量)\n- [Github 上下文](#github-上下文)\n\n\u003c!-- /TOC --\u003e\n\u003c!--idoc:ignore:end--\u003e\n\n## 基本概念\n\nGitHub actions 有四个基本的概念，如下：\n\n- workflow （工作流程）：持续集成一次运行的过程，就是一个 workflow。\n- job （任务）：一个 workflow 由一个或多个 jobs 构成，含义是一次持续集成的运行，可以完成多个任务。\n- step（步骤）：每个 job 由多个 step 构成，一步步完成。\n- action （动作）：每个 step 可以依次执行一个或多个命令（action）。\n\n### 配置文件\n\nGitHub Actions 采用 [`YAML`](https://www.ruanyifeng.com/blog/2016/07/yaml.html) 格式的配置文件叫做 workflow 文件，存放在代码仓库的 `.github/workflows` 目录。文件名可以任意取，但是后缀名统一为 `.yml`，比如 `ci.yml`。一个库可以有多个 `workflow` 文件。GitHub 只要发现 `.github/workflows` 目录里面有 `.yml` 文件，就会根据配置事件自动运行该文件。\n\n```yml\nname: GitHub Actions Demo\non:\n  push:\n    branches:\n      - main\n\njobs:\n  build:\n    runs-on: ubuntu-18.04\n    steps:\n      - uses: actions/checkout@v3\n      - uses: actions/setup-node@v3\n        with:\n          node-version: 16\n\n      - run: npm install\n\n      - run: npm run build\n```\n\n### 定触条件\n\n[`on`](https://docs.github.com/cn/actions/using-workflows/events-that-trigger-workflows) 字段指定触发 `workflow` 的条件，通常是某些事件。\n\n```yml\n# push 事件触发 workflow\non: push\n\n# push 事件或 pull_request 事件都可以触发 workflow\non: [push, pull_request]\n\n# 只有在 main 分支 push 事件触发 workflow\non:\n  push:\n    branches:\n      - main\n\n# push 事件触发 workflow，但是 docs 目录下的更改 push 事件不触发 workflow\non:\n  push:\n    paths-ignore:\n      - 'docs/**'\n# push 事件触发 workflow，\n# 包括 sub-project 目录或其子目录中的文件，触发 workflow\n# 除非该文件在 sub-project/docs 目录中，不触发 workflow\non:\n  push:\n    paths:\n      - 'sub-project/**'\n      - '!sub-project/docs/**'\n# 版本发布为 published 时运行工作流程。\non:\n  release:\n    types: [published]\n```\n\n### 多项任务\n\n通过 `jobs` (`jobs.\u003cjob_id\u003e.name`)字段，配置一项或多项需要执行的任务。\n\n```yml\njobs:\n  my_first_job:\n    name: My first job\n  my_second_job:\n    name: My second job\n```\n\n### 多项任务依赖关系\n\n通过 `needs` (`jobs.\u003cjob_id\u003e.needs`)字段，指定当前任务的依赖关系。\n\n```yml\njobs:\n  job1:\n  job2:\n    needs: job1\n  job3:\n    needs: [job1, job2]\n```\n\n上面配置中，`job1` 必须先于 `job2` 完成，而 `job3` 等待 `job1` 和 `job2` 的完成才能运行。因此，这个 workflow 的运行顺序依次为：`job1`、`job2`、`job3`。\n\n### 多项任务传递参数\n\n```yml\njobs:\n  job1:\n    runs-on: ubuntu-latest\n    # Map a step output to a job output\n    outputs:\n      output1: ${{ steps.step1.outputs.test }}\n      output2: ${{ steps.step2.outputs.test }}\n    steps:\n      - id: step1\n        run: echo \"::set-output name=test::hello\"\n      - id: step2\n        run: echo \"::set-output name=test::world\"\n  job2:\n    runs-on: ubuntu-latest\n    needs: job1\n    steps:\n      - run: echo ${{needs.job1.outputs.output1}} ${{needs.job1.outputs.output2}}\n```\n\n### 指定每项任务的虚拟机环境\n\n`runs-on` 字段指定运行所需要的虚拟机环境。⚠️ 它是必填字段。\n\n```yml\nruns-on: ubuntu-18.04\n```\n\n```yml\njobs:\n  build:\n    runs-on: ubuntu-18.04\n```\n\n| **虚拟环境**             | **YAML 工作流程标签**                   | **注：**                                                                             |\n| -------------------- | --------------------------------- | ---------------------------------------------------------------------------------- |\n| Windows Server 2022  | `windows-latest` 或 `windows-2022` | `windows-latest` 标签目前使用的是 Windows Server 2022 运行器镜像 |\n| Windows Server 2019  | `windows-2019`                    |                                                                                    |\n| Ubuntu 22.04         | `ubuntu-22.04`                    | Ubuntu 22.04 目前处于公开测试阶段。                                          |\n| Ubuntu 20.04         | `ubuntu-latest` 或 `ubuntu-20.04`  |                                                                                    |\n| Ubuntu 18.04         | `ubuntu-18.04`                    |                                                                                    |\n| macOS Monterey 12    | `macos-12`                        | macOS 12 目前处于公开测试阶段。                                     |\n| macOS Big Sur 11     | `macos-latest` 或 `macos-11`       | `macos-latest` 标签当前使用 macOS 11 运行器镜像。                |\n| macOS Catalina 10.15 | `macos-10.15`                     |                                                                                    |\n\n### 指定每项任务的步骤\n\n`steps` 字段指定每个 Job 的运行步骤，可以包含一个或多个步骤。每个步骤都可以指定以下三个字段。\n\n```bash\njobs.\u003cjob_id\u003e.steps.name：步骤名称。\njobs.\u003cjob_id\u003e.steps.run：该步骤运行的命令或者 action。\njobs.\u003cjob_id\u003e.steps.env：该步骤所需的环境变量。\n```\n\n```yml\njobs:\n  build:\n    runs-on: ubuntu-18.04\n    steps:\n      - uses: actions/checkout@v3\n      - uses: actions/setup-node@v3\n        with:\n          node-version: 16\n          registry-url: 'https://registry.npmjs.org'\n\n      - run: npm install\n\n      - run: npm run build\n```\n\n### 一个工作流完成触发另外一个工作流\n\n```yml\n# ci.yml\nname: Node.js CI\non: push\n\njobs:\n  test:\n    # Containers must run in Linux based operating systems\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n      - uses: actions/setup-node@v3\n        with:\n          node-version: 16\n\n      - name: Install dependencies\n        run: npm install\n\n  trigger_tests:\n    needs: test\n    runs-on: ubuntu-latest\n    steps:\n      - name: Trigger tests\n        uses: actions/github-script@v6\n        with:\n          script: |\n            const res = await github.rest.repos.createDispatchEvent({\n              owner: 'jaywcjlove',\n              repo: 'typenexus',\n              event_type: 'run-deploy'\n            });\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n上面 `ci.yml` 工作流执行完成之后，触发 `main.yml`，注意上面的 `run-deploy` 取名保持一致\n\n```yml\n# main.yml\nname: deploy\non:\n  repository_dispatch:\n    types: [run-deploy]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n```\n\n## 常用实例\n\n### 获取版本信息\n\n```yml\n- name: Test\n  run: |\n    # Strip git ref prefix from version\n    echo \"${{ github.ref }}\"\n    # VERSION=$(echo \"${{ github.ref }}\" | sed -e 's,.*/\\(.*\\),\\1,')\n\n    # # Strip \"v\" prefix from tag name\n    # [[ \"${{ github.ref }}\" == \"refs/tags/\"* ]] \u0026\u0026 VERSION=$(echo $VERSION | sed -e 's/^v//')\n    echo \"$VERSION\"\n```\n\n\n```yml\nname: CI\non:\n  push:\n    tags:\n      - v*\n\njobs:\n  create-docker-image:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@master\n      # 向 EVN 写入 CURRENT_VERSION 环境变量赋值版本号\n      - run: |\n          echo \"CURRENT_VERSION=${GITHUB_REF#refs/tags/v}\" \u003e\u003e $GITHUB_ENV\n      # 可以获取到 CURRENT_VERSION 的值\n      - run: echo \"${{env.CURRENT_VERSION}}\"\n```\n\n### 通过 commit 跳过任务\n\n```yml\njobs:\n  build:\n    if: \"!contains(github.event.head_commit.message, 'skip ci')\"\n```\n\n### 获取是否存在 Tag\n\n```yml\n- run: echo \"previous_tag=$(git describe --tags --abbrev=0 2\u003e/dev/null || echo '')\" \u003e\u003e $GITHUB_ENV\n- name: Generate changelog\n  id: changelog\n  uses: jaywcjlove/changelog-generator@main\n  if: env.previous_tag\n```\n\n### 修改 package.json\n\n```yml\n- name: Modify Version\n  shell: bash\n  run: |\n    node -e 'var pkg = require(\"./package.json\"); pkg.version= (new Date().getFullYear().toString().substr(2)) + \".\" + (new Date().getMonth() + 1) + \".\" + (new Date().getDate()); require(\"fs\").writeFileSync(\"./package.json\", JSON.stringify(pkg, null, 2))'\n```\n\n### 提交到 gh-pages 分支\n\n```yml\n- name: Deploy\n  uses: peaceiris/actions-gh-pages@v3\n  with:\n    github_token: ${{ secrets.GITHUB_TOKEN }}\n    publish_dir: ./build\n```\n\n### 克隆带有 Submodule 的仓库\n\n```yml\n- name: Checkout\n  uses: actions/checkout@v3\n  with:\n    path: main\n    submodules: true\n```\n\n`submodules`：`true` 检出子模块或 `recursive` 递归检出子模块。\n\n```yml\n- name: Clone sub repository\n  shell: bash\n  run: |\n    auth_header=\"$(git config --local --get http.https://github.com/.extraheader)\"\n    # git submodule sync --recursive\n    # git -c \"http.extraheader=$auth_header\" -c protocol.version=2 submodule update --init --remote --force --recursive --checkout ant.design\n```\n\n### 步骤依赖作业\n\n使用 `jobs.\u003cjob_id\u003e.needs` 识别在此作业运行之前必须成功完成的任何作业。它可以是一个字符串，也可以是字符串数组。 如果某个作业失败，则所有需要它的作业都会被跳过，除非这些作业使用让该作业继续的条件表达式。\n\n```yml\njobs:\n  job1:\n  job2:\n    needs: job1\n  job3:\n    needs: [job1, job2]\n```\n\n在此示例中，`job1` 必须在 `job2` 开始之前成功完成，而 `job3` 要等待 `job1` 和 `job2` 完成。\n\n此示例中的作业按顺序运行：\n\n```\n❶ job1\n❷ job2\n❸ job3\n```\n\n```yml\njobs:\n  job1:\n  job2:\n    needs: job1\n  job3:\n    if: ${{ always() }}\n    needs: [job1, job2]\n```\n\n在此示例中，`job3` 使用 `always()` 条件表达式，因此它始终在 `job1` 和 `job2` 完成后运行，不管它们是否成功。\n\n### 步骤作业文件共享\n\nArtifacts 是 GitHub Actions 为您提供持久文件并在运行完成后使用它们或在作业（文档）之间共享的一种方式。\n\n要创建工件并使用它，您将需要不同的操作：上传和下载。\n要上传文件或目录，您只需像这样使用它：\n\n```yml\nsteps:\n  - uses: actions/checkout@v2\n  - run: mkdir -p path/to/artifact\n  - run: echo hello \u003e path/to/artifact/world.txt\n  - uses: actions/upload-artifact@v2\n    with:\n      name: my-artifact\n      path: path/to/artifact/world.txt\n```\n\n然后下载 `artifact` 以使用它：\n\n```yml\nsteps:\n  - uses: actions/checkout@v2\n  - uses: actions/download-artifact@v2\n    with:\n      name: my-artifact\n```\n\n### 提交 NPM 包\n\n```yml\n- run: npm publish --access public\n  env:\n    NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}\n```\n\n获取 `NPM_TOKEN`，可以通过 [npm](https://www.npmjs.com/settings/wcjiang/tokens) 账号创建 `token`\n\n```shell\nnpm token list [--json|--parseable] # 查看\nnpm token create [--read-only] [--cidr=1.1.1.1/24,2.2.2.2/16] # 创建\nnpm token revoke \u003cid|token\u003e # 撤销\n```\n\n### 提交 docker 镜像\n\n```yml\n# https://www.basefactor.com/github-actions-docker\n- name: Docker login\n  run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }}\n\n- name: Build ant.design image\n  run: |\n    cd ./ant\\.design\n    docker build -t ant.design .\n- name: Tags \u0026 Push docs\n  run: |\n    # Strip git ref prefix from version\n    VERSION=$(echo \"${{ github.ref }}\" | sed -e 's,.*/\\(.*\\),\\1,')\n\n    # Strip \"v\" prefix from tag name\n    [[ \"${{ github.ref }}\" == \"refs/tags/\"* ]] \u0026\u0026 VERSION=$(echo $VERSION | sed -e 's/^v//')\n\n    docker tag ant.design ${{ secrets.DOCKER_USER }}/ant.design:$VERSION\n    docker tag ant.design ${{ secrets.DOCKER_USER }}/ant.design:latest\n    docker push ${{ secrets.DOCKER_USER }}/ant.design:$VERSION\n    docker push ${{ secrets.DOCKER_USER }}/ant.design:latest\n```\n\n### 提交 commit 到 master 分支\n\n```yml\n- name: 生成一个文件，并将它提交到 master 分支\n  run: |\n    # Strip git ref prefix from version\n    VERSION=$(echo \"${{ github.ref }}\" | sed -e 's,.*/\\(.*\\),\\1,')\n    COMMIT=released-${VERSION}\n    # Strip \"v\" prefix from tag name\n    [[ \"${{ github.ref }}\" == \"refs/tags/\"* ]] \u0026\u0026 VERSION=$(echo $VERSION | sed -e 's/^v//')\n    echo \"输出版本号：$VERSION\"\n    # 将版本输出到当前 VERSION 文件中\n    echo \"$VERSION\" \u003e VERSION\n    echo \"1. 输出Commit：$commit\"\n    echo \"2. Released $VERSION\"\n    git fetch\n    git config --local user.email \"action@github.com\"\n    git config --local user.name \"GitHub Action\"\n    git add .\n    git commit -am $COMMIT\n    git branch -av\n    git pull origin master\n- name: 将上面的提交 push 到 master 分支\n  uses: ad-m/github-push-action@master\n  with:\n    github_token: ${{ secrets.GITHUB_TOKEN }}\n```\n\n### Node.js\n\n```yml\n- name: Setup Node\n  uses: actions/setup-node@v2\n  with:\n    node-version: 18\n```\n\n```yml\n\njobs:\n  test:\n    # Containers must run in Linux based operating systems\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        node-version: [16.x, 18.x, 20.x]\n\n    steps:\n      - uses: actions/checkout@v3\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n\n      - run: npm ci\n      - run: npm run build --if-present\n      - run: npm test\n```\n\n### 同步 Gitee\n\n```yml\n- name: Sync to Gitee\n  run: |\n    mirror() {\n      git clone \"https://github.com/$1/$2\"\n      cd \"$2\"\n      git remote add gitee \"https://jaywcjlove:${{ secrets.GITEE_TOKEN }}@gitee.com/uiw/$2.git\"\n      git remote set-head origin -d\n      git push gitee --prune +refs/remotes/origin/*:refs/heads/* +refs/tags/*:refs/tags/*\n      cd ..\n    }\n    mirror uiwjs uiw\n```\n\n## 环境变量\n\n\u003e [默认环境变量](https://help.github.com/cn/actions/configuring-and-managing-workflows/using-environment-variables#default-environment-variables)\n\n强烈建议操作使用环境变量访问文件系统，而非使用硬编码的文件路径。 GitHub 设置供操作用于所有运行器环境中的环境变量。\n\n### 默认环境变量\n\n环境变量 | 描述\n---- | ----\nCI |  始终设置为 true。\nHOME |  用于存储用户数据的 GitHub 主目录路径。 例如 /github/home。\nGITHUB_WORKFLOW | 工作流程的名称。\nGITHUB_RUN_ID | 仓库中每个运行的唯一编号。 如果您重新执行工作流程运行，此编号不变。\nGITHUB_RUN_NUMBER | 仓库中特定工作流程每个运行的唯一编号。 此编号从 1（对应于工作流程的第一个运行）开始，然后随着每个新的运行而递增。 如果您重新执行工作流程运行，此编号不变。\nGITHUB_ACTION | 操作唯一的标识符 (id)。\nGITHUB_ACTIONS |  当 GitHub 操作 运行工作流程时，始终设置为 true。 您可以使用此变量来区分测试是在本地运行还是通过 GitHub 操作 运行。\nGITHUB_ACTOR |  发起工作流程的个人或应用程序的名称。 例如 octocat。\nGITHUB_REPOSITORY | 所有者和仓库名称。 例如 octocat/Hello-World。\nGITHUB_EVENT_NAME | 触发工作流程的 web 挂钩事件的名称。\nGITHUB_EVENT_PATH | 具有完整 web 挂钩事件有效负载的文件路径。 例如 /github/workflow/event.json。\nGITHUB_WORKSPACE |  GitHub 工作空间目录路径。 如果您的工作流程使用 [actions/checkout](https://github.com/actions/checkout) 操作，工作空间目录将包含存储仓库副本的子目录。 如果不使用 [actions/checkout](https://github.com/actions/checkout) 操作，该目录将为空。 例如 /home |/runner/work/my-repo-name/my-repo-name。\nGITHUB_SHA |  触发工作流程的提交 SHA。 例如 ffac537e6cbbf934b08745a378932722df287a53。\nGITHUB_REF |  触发工作流程的分支或标记参考。 例如 refs/heads/feature-branch-1。 如果分支或标记都不适用于事件类型，则变量不会存在。\nGITHUB_HEAD_REF | 仅为复刻的仓库设置。 头部仓库的分支。\nGITHUB_BASE_REF | 仅为复刻的仓库设置。 基础仓库的分支。\n\n### 自定义环境变量\n\n\u003e 注： `GitHub` 会保留 `GITHUB_` 环境变量前缀供 `GitHub` 内部使用。 设置有 `GITHUB_` 前缀的环境变量或密码将导致错误。\n\n在 `https://github.com/\u003c用户名\u003e/\u003c项目名称\u003e/settings/secrets` 中添加 `secrets` `NODE_API_TOKEN`，在工作流中设置环境变量 [`NODE_API_TOKEN`](https://github.com/jaywcjlove/github-actions/blob/799b232fca3d9df0272eaa12610f9ebfca51b288/.github/workflows/ci.yml#L46)\n\n```yml\n- name: 测试 nodejs 获取环境变量\n  env:\n    NODE_API_TOKEN: ${{ secrets.NODE_API_TOKEN }}\n  run: npm run env\n```\n\n## Github 上下文\n\n\u003e [Github 上下文](https://help.github.com/cn/actions/reference/context-and-expression-syntax-for-github-actions)\n\n属性名称 | 类型 | 描述\n---- | ---- | ----\ngithub | object | 工作流程中任何作业或步骤期间可用的顶层上下文。\ngithub.event | object | 完整事件 web 挂钩有效负载。 更多信息请参阅“触发工作流程的事件”。\ngithub.event_path | string | 运行器上完整事件 web 挂钩有效负载的路径。\ngithub.workflow | string | 工作流程的名称。 如果工作流程文件未指定 name，此属性的值将是仓库中工作流程文件的完整路径。\ngithub.job | string | 当前作业的 job_id。\ngithub.run_id | string | 仓库中每个运行的唯一编号。 如果您重新执行工作流程运行，此编号不变。\ngithub.run_number | string | 仓库中特定工作流程每个运行的唯一编号。 此编号从 1（对应于工作流程的第一个运行）开始，然后随着每个新的运行而递增。 如果您重新执行工作流程运行，此编号不变。\ngithub.actor | string | 发起工作流程运行的用户的登录名。\ngithub.repository | string | 所有者和仓库名称。 例如 Codertocat/Hello-World。\ngithub.repository_owner | string | 仓库所有者的名称。 例如 Codertocat。\ngithub.event_name | string | 触发工作流程运行的事件的名称。\ngithub.sha | string | 触发工作流程的提交 SHA。\ngithub.ref | string | 触发工作流程的分支或标记参考。\ngithub.head_ref | string | 工作流程运行中拉取请求的 head_ref 或来源分支。 此属性仅在触发工作流程运行的事件为 pull_request 时才可用。\ngithub.base_ref | string | 工作流程运行中拉取请求的 base_ref 或目标分支。 此属性仅在触发工作流程运行的事件为 pull_request 时才可用。\ngithub.token | string | 代表仓库上安装的 GitHub 应用程序进行身份验证的令牌。 这在功能上等同于 GITHUB_TOKEN 密码。 更多信息请参阅“使用 GITHUB_TOKEN 验证身份”。\ngithub.workspace | string | 使用 checkout 操作时步骤的默认工作目录和仓库的默认位置。\ngithub.action | string | 正在运行的操作的名称。 在当前步骤运行脚本时，GitHub 删除特殊字符或使用名称 run。 如果在同一作业中多次使用相同的操作，则名称将包括带有序列号的后缀。 例如，运行的第一个脚本名称为 run1，则第二个脚本将命名为 run2。 同样，actions/checkout 第二次调用时将变成 actionscheckout2。\n\n\n## Contributors\n\nAs always, thanks to our amazing contributors!\n\n\u003ca href=\"https://github.com/jaywcjlove/github-actions/graphs/contributors\"\u003e\n  \u003cimg src=\"https://jaywcjlove.github.io/github-actions/CONTRIBUTORS.svg\" /\u003e\n\u003c/a\u003e\n\nMade with [action-contributors](https://github.com/jaywcjlove/github-action-contributors).\n\n## License\n\nLicensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaywcjlove%2Fgithub-actions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaywcjlove%2Fgithub-actions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaywcjlove%2Fgithub-actions/lists"}