[玩具]我把issue打印出来然后揉掉....

起因是以前在做 issues-helper 推广的时候一直没仔细钻研过具体原理,就想着把这个链路跑通顺便自己做一个玩具。

玩具目标是:指定项目的有新的 issue 时打印出一张标签来提醒我有新的任务了。

流程

项目 -> 注册本地 runner

创建issue -> 触发 github action -> 本地 runner 触发 -> 打印一张贴纸

实践

(一)注册 runner

  1. 项目点击 Action 注册一个 Self hosted runners
  1. 按照流程在本地注册 runner
  1. 检查是否在线

(二)触发 issue 指定动作

  1. 设计,我想在 issue 创建的时候进行提醒,并且在分配给某位同事的时候打印出一张贴纸,然后把任务贴在同事电脑上
  2. 编写 action 在issues 有指定动作时触发,由于本地已经有 node 环境了,脚本不用编写安装 Node环境
yaml 复制代码
name: CI

on:
  issues:
    types: [opened, edited, closed, reopened, assigned, unassigned]

jobs:
  issue-create:
    runs-on: self-hosted
    steps:
      - name: Check Out
        uses: actions/checkout@v2

      - name: Issue Create
        uses: ./
        with:
          action: ${{ github.event.action }}
          issue: ${{ toJson(github.event.issue) }}
          repo: ${{ toJson(github.event.repository) }}
  1. 在根路径(uses: ./)下创建 action.yml 作为运行配置
vbnet 复制代码
name: 'Issue to Print'
description: 'test action'
author: 'ajuner'

runs:
  using: 'node16'
  main: 'index.js'

inputs:
  action:
    description: 'Action name'
  issue:
    description: 'Issue number'
  repo:
    description: 'Repository name'
  1. 在 index.js 中接收 action 参数
ini 复制代码
const action = core.getInput("action");
const issue = JSON.parse(core.getInput("issue"));

console.log("action", action);
console.log("issue", issue);

(三)编写打印相关代码

使用条码热敏打印机 TSPL 指令

ini 复制代码
const core = require("@actions/core");
const iconv = require("iconv-lite");
const escpos = require("node-escpos-win");
const usb = escpos.GetDeviceList("USB");
const list = usb.list.filter(
  (item) => item.service === "usbprint" || item.name === "USB 打印支持"
);
const printer = list[0];

if (!printer) {
  console.warn("没有连接usb打印机");
  return;
}

const action = core.getInput("action");
const issue = JSON.parse(core.getInput("issue"));

console.log("action", action);
console.log("issue", issue);

const cmds = [
  "SIZE 45 mm,60 mm",
  "GAP 2 mm,0 mm",
  "DENSITY 15",
  "SPEED 4",
  "DIRECTION 1",
  "CLS",
];

const actionText = {
  opened: `有新的issue #${issue.number}`,
  closed: `issue #${issue.number} 已关闭`,
  reopened: `issue #${issue.number} 已重新打开`,
  edited: `issue #${issue.number} 有更新`,
  assigned: `issue #${issue.number} 已分配`,
  unassigned: `issue #${issue.number} 已取消分配`,
};

cmds.push(`TEXT 0,20,"TSS24.BF2",0,1,1,"${actionText[action]}"`);
cmds.push(`TEXT 0,60,"TSS24.BF2",0,1,1,"标题:${issue.title}"`);
cmds.push(`TEXT 0,100,"TSS24.BF2",0,1,1,"用户:${issue.user.login}"`);
if (!!issue?.assignees?.length) {
  const logins = issue.assignees.map((item) => item.login).join("、");
  cmds.push(`TEXT 0,180,"TSS24.BF2",0,1,1,"任务分配者:${logins}"`);
}
cmds.push("PRINT 1", "");

const content = iconv.encode(cmds.join("\r\n"), "gbk");

const res = escpos.Print(printer.path, content);

console.log(res);

(四)测试issue

查看打印效果

(五)揉掉这个需求然后丢到垃圾桶里

资源

源代码:github.com/ajuner/issu... (node_modules比较小,不想在action里加install流程,别喷)

相关资料:

github.com/actions/too...

github.com/actions-coo...

相关推荐
山有木兮木有枝_8 分钟前
从代码到创作:探索AI图片生成的神奇世界
前端·coze
言兴20 分钟前
秋招面试---性能优化(良子大胃袋)
前端·javascript·面试
WebInfra1 小时前
Rspack 1.5 发布:十大新特性速览
前端·javascript·github
雾恋2 小时前
我用 trae 写了一个菜谱小程序(灶搭子)
前端·javascript·uni-app
烛阴3 小时前
TypeScript 中的 `&` 运算符:从入门、踩坑到最佳实践
前端·javascript·typescript
Java 码农3 小时前
nodejs koa留言板案例开发
前端·javascript·npm·node.js
ZhuAiQuan4 小时前
[electron]开发环境驱动识别失败
前端·javascript·electron
nyf_unknown4 小时前
(vue)将dify和ragflow页面嵌入到vue3项目
前端·javascript·vue.js
胡gh4 小时前
浏览器:我要用缓存!服务器:你缓存过期了!怎么把数据挽留住,这是个问题。
前端·面试·node.js
你挚爱的强哥4 小时前
SCSS上传图片占位区域样式
前端·css·scss