Skip to content
扫码开始移动端阅读

初尝actions

1089
需要≈
5.445
分钟
other

需求产生

我有一些脚本,是那种浏览器插件用的,多个设备同步的时候,需要存放到github上,防止代码丢失。

在脚本少的时候,还没什么感觉,但是现在已经有3个了。我想着像我这样的男人,以后肯定还会写很多很多脚本。所以我需要一个目录,在打开github的时候就可以看到我有那些脚本,这样岂不是妙哉。

说干就干,我想了一下,在古希腊掌握github的神,王先生说过,Actions 牛逼!

尝试

首先介绍一下Actions,首先,如果你之前没听过,那么很正常,其次,如果你听过,那么也很正常,因为这是一个褒贬不一的东西,有的人爱的死去活来,有的人恨的牙痒痒,有的人爱恨交加。

它是用来做什么的呢,简单来说就是用来做持续集成和部署的。那么,持续集成和部署又是什么东西呢?哥们,如果你这都不知道。不可能,不会有人不知道的。不知道的自己百度去。

新建一个脚本

TIP

这两种方法都可以,但是推荐使用第一种方法。

  1. 你可以在你的GitHub 仓库 Actions 标签页直接创建新的工作流。选择 Set up a workflow yourself 或者从模板中选择。

  2. 或者也在你项目的目录中 .github/workflows 目录下创建 YAML 文件

开始编写

yaml
# 首先定义一个名字
name: Update File List

# 设置触发钩子(这太直观了,当push main 分支的时候触发)
on:
  push:
    branches:
      - main
  workflow_dispatch:

# 设置任务
jobs:
# 定义一个任务
  update-readme:
# 运行在ubuntu上
    runs-on: ubuntu-latest
    steps:
    # 定义一个步骤
        - name: Checkout repository
          uses: actions/checkout@v2
    # 提取代码
        - name: Generate file list
    # 通过echo 生成一个文件,并写入内容
          run: |
          echo "### 统计信息:" > FILE_LIST.md
          echo "" >> FILE_LIST.md
          echo "| 名称 | 匹配规则 | 文件 | 描述 |" >> FILE_LIST.md
          echo "|-------------|-----------------|----------|-------------|" >> FILE_LIST.md
          
          # 查找仓库里script目录下所有js文件
          for file in script/*.js; do
            if [[ -f "$file" ]]; then
            # 读取文件
              content=$(cat "$file")
              # 提取信息
              name=$(echo "$content" | awk -F'// @name ' '{print $2}' | awk '{print $1}' | xargs)
              match=$(echo "$content" | sed -n 's/.*\/\/ @match[[:space:]]*\(.*\)/\1/p' | xargs)
              filename=$(basename "$file")
              description=$(echo "$content" | sed -n 's/.*\/\/ @description[[:space:]]*\(.*\)/\1/p' | xargs)
              # 添加到表格
              echo "| $name | $match | [script/$filename](./script/$filename)| $description |" >> FILE_LIST.md
            fi
          done
          echo "" >> FILE_LIST.md
          echo "更新于 $(TZ='Asia/Shanghai' date '+%Y年%m月%d日 %H:%M:%S')" >> FILE_LIST.md
        - name: Update README.md
          run: |
          # 删除原有统计信息
          sed -i '/^### 统计信息:/,$d' README.md

          # 添加新文件列表
          cat FILE_LIST.md >> README.md
          rm FILE_LIST.md  # 删除临时文件
          # 添加git commit
        - name: Commit changes
          run: |
          git config --local user.email "action@github.com"
          git config --local user.name "GitHub Action"
          git add README.md
          git commit -m "Update file list in README.md" || echo "No changes to commit"
          git push

测试

当我运行的时候遇到了一些问题,不过问题不大,都解决了

  1. 权限问题,在储存库中Settings选项卡中选择Actions => General
    • Actions permissions = Allow all actions and reusable workflows
    • Workflow permissions = Read and write permissions
    • Access = Accessible from repositories owned by the user [xxx]
  2. 脚本调试
    • 可以在git Bash 中直接运行部分代码
    • 或者下载一个vscode插件,在里面直接运行

运行结果

md

| 名称             | 匹配规则                       | 文件                                                 | 描述                |
| ---------------- | ------------------------------ | ---------------------------------------------------- | ------------------- |
| 儿歌下载器       | https://**********/*           | [script/getErGe.js](./script/getErGe.js)             | 2024/5/26 13:24:54  |
| 视频去质器       | https://**********/*           | [script/getVideo.js](./script/getVideo.js)           | 2023/9/28 0:00:00   |
| 去掉微软邮箱广告 | https://**********/*           | [script/rm-hotmail-ad.js](./script/rm-hotmail-ad.js) | 2024/10/12 17:46:56 |
| bt刮削器         | https://**********.top/search* | [script/tmdb.js](./script/tmdb.js)                   | 2024/10/10 15:20:39 |

更新于 2024年10月14日 17:46:12

预览效果


名称匹配规则文件描述
儿歌下载器https://*********/script/getErGe.js2024/5/26 13:24:54
视频去质器https://*********/script/getVideo.js2023/9/28 0:00:00
去掉微软邮箱广告https://*********/script/rm-hotmail-ad.js2024/10/12 17:46:56
bt刮削器https://*********.top/searchscript/tmdb.js2024/10/10 15:20:39

更新于 2024年10月14日 17:46:12


总结

这玩意让我想起了DockerDockerfile,原理都是差不多的。但是不需要部署,不需要打包,直接运行。这种感觉还是挺神奇的。上次体会到这种感觉还是在使用Jenkins的时候,当然,因为我刚开始玩,所以对这个东西还不是很了解。如果你有更好的方案,也欢迎在评论区分享。

上次更新: