惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
The Exploit Database - CXSecurity.com
I
Intezer
P
Privacy & Cybersecurity Law Blog
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
K
Kaspersky official blog
AWS News Blog
AWS News Blog
Schneier on Security
Schneier on Security
雷峰网
雷峰网
www.infosecurity-magazine.com
www.infosecurity-magazine.com
宝玉的分享
宝玉的分享
G
Google Developers Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Forbes - Security
Forbes - Security
T
The Blog of Author Tim Ferriss
S
Security @ Cisco Blogs
NISL@THU
NISL@THU
N
News and Events Feed by Topic
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
爱范儿
爱范儿
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
Blog — PlanetScale
Blog — PlanetScale
Help Net Security
Help Net Security
F
Full Disclosure
V
Vulnerabilities – Threatpost
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
A
Arctic Wolf
D
Docker
T
Tailwind CSS Blog
L
LangChain Blog
The Last Watchdog
The Last Watchdog
美团技术团队
博客园 - Franky
H
Hacker News: Front Page
Stack Overflow Blog
Stack Overflow Blog
W
WeLiveSecurity
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recorded Future
Recorded Future
V
Visual Studio Blog
N
Netflix TechBlog - Medium
Hacker News: Ask HN
Hacker News: Ask HN
博客园 - 司徒正美
Cyberwarzone
Cyberwarzone
S
Schneier on Security
Know Your Adversary
Know Your Adversary

I'm OWenT

国产大模型(GLM 5.1、Kimi K2.6)真实场景效果和 Coding Plan 额度测试 新版本libatapp的连接管理——从etcd服务发现到拓扑驱动的自动重连 新版本libatbus的设计变更——从树形路由到拓扑驱动 Protobuf又一坑 - C++标准和ABI兼容性 AI真好用-给Blog主题统一加mermaid,chart.js,excalidraw,draw.io的多种引入方式支持 给内网部署Squid-通用HTTP下载缓存 UE使用CodeChecker和clang-tidy生成静态分析报告 找出UE的循环依赖 C++小协程栈和临时变量及作用域的栈溢出问题分析 游戏服务的可观测性能力建设(C++生态) 指标上报的多线程优化和多拉取源点优化 协程(libcopp)的Channel功能和CPU命中率优化 通用RPC代码生成器 实现strong_rc_ptr(比shared_ptr更快的引用计数智能指针) 手夯一个STL allocator和对象内存分析组件 std::condition_variable 的信号丢失问题 踩坑一处(GCC)STL std::async 实现BUG导致的crash问题 GCC 14的一个warning to error BUG 给xresloader(Excel导表工具)增强UE读表支持(包含蓝图,Blueprint) Opentelemetry社区在gRPC的几个链接问题(静态库和动态库混用,musl工具链,符号裁剪) Excel转表工具(xresloader)的新验证器(验证外部Excel和文本数据,唯一性和自定义规则) protobuf v22和gRPC v1.55版本升级的依赖变化和upb适配 关于protobuf近期版本(v20/v3.20+)和 gRPC v1.54版本在某些编译环境下的一些链接和编译问题 xresloader-Excel导表工具链的近期变更汇总 打通游戏服务端框架的C++20协程改造的最后一环 Opentelemetry-cpp的Logs模块标准更新(涉及近期版本:1.8-1.9的BREAK CHANGES) 给cmake-toolset和工具链(curl等)加HTTP/2和HTTP/3支持 又开新坑之 coredns 插件: nftables和filter 关于opentelemetry-cpp社区对于C++ Head Only组件单例和符号可见性的讨论小记 填个转表工具 xresloader 去年的坑(数组尾部裁剪) 集成 upb 和 lua binding 的踩坑小记 libcopp对C++20协程的接入和接口设计 再度优化GCC、LLVM、Clang、libc++、libc++abi等套件的构建脚本 游戏服务的分布式事务优化(二)- 事务管理 游戏服务的分布式事务优化(一)- Write Ahead Log(WAL) 模块 记录一些bazel适配用编译选项 测试现代化硬件C++浮点数性能和一致性 适配Boringssl和OpenSSL 3.0 近期cmake-toolset的一些适配问题 C++20 Text Formatting/fmtlib 适配问题小记 再次重构LLVM+Clang+libcxx+libc++abi+其他相关工具的构建流程 重构基于CMake的构建工具链 新版GCC和LLVM+Clang终于Release啦 折腾一下nftables下的双拨 [C++20] Module partitions和符号交叉引用(声明和实现分离) [Rust] 实现一个线程安全且迭代器可以保存的链表 基于protobuf的代码生成 几个使用protobuf中C++接口的Arena的坑 Amazon Aurora DB存储引擎论文阅读小记 近期对libatapp的一些优化调整(增加服务发现和连接管理,支持yaml等) xresloader转表工具链增加了一些新功能(map,oneof支持,输出矩阵,基于模板引擎的加载代码生成等) 在游戏服务器中使用分布式事务 libcopp接入C++20 Coroutine和一些过渡期的设计 libatbus 的大幅优化 nftables初体验 容器配置开发环境小计 PALM Tree - 适合多核并发架构的B+树 - 论文阅读小记 跨平台协程库 - libcopp 简介 C++20 Coroutine 性能测试 (附带和libcopp/libco/libgo/goroutine/linux ucontext对比) 一些xresloader(转表工具)的改进 protobuf、flatbuffer、msgpack 针对小数据包的简单对比 协程框架(libcopp) 小幅优化 Excel转表工具(xresloader) 增加protobuf插件功能和集成 UnrealEngine 支持 Anna(支持任意扩展和超高性能的KV数据库系统)阅读笔记 C++20 Coroutine libcopp merge boost.context 1.69.0 Google去中心化分布式系统论文三件套(Percolator、Spanner、F1)读后感 Rust玩具-企业微信机器人通用服务 使用ELK辅助监控开发测试环境服务质量和问题定位 2018年的新通用伪随机数算法(xoshiro / xoroshiro)的C++(head only)实现 Webpack+vue+boostrap+ejs构建Web版GM工具 Rust的第二次接触-写个小服务器程序 理解和适配AEAD加密套件 atsf4g-co的进化:协程框架v2、对象路由系统和一些其他细节优化 协程框架(libcopp)v2优化、自适应栈池和同类库的Benchmark对比 可执行文件压缩 初识Rust 使用restructedtext编写xresloader文档 atframework的etcd模块化重构 C++的backtrace ECDH椭圆双曲线(比DH快10倍的密钥交换)算法简介和封装 protobuf-net的动态Message实现 pbc的proto3接入 atgateway内置协议流程优化-加密、算法协商和ECDH 整理一波软件源镜像同步工具+DevOps工具 Blog切换到Hugo libcopp v2的第一波优化完成 libcopp(v2) vs goroutine性能测试 libcopp的线程安全、栈池和merge boost.context 1.64.0 GCC 7和LLVM+Clang+libc++abi 4.0的构建脚本 libatbus的几个藏得很深的bug 用cmake交叉编译到iOS和Android 开源项目得一些小维护 atapp的c binding和c#适配 对象路由系统设计 2016年总结 近期的一个协程流程BUG 重写了llvm+clang+libc++和libc++abi的构建脚本 atsf4g完整游戏工程示例|I'm OWenT atframework基本框架已经完成|I'm OWenT
尝鲜Github Action
owent · 2019-09-21 · via I'm OWenT

blog-website

前言

Github Action 上线有一阵子了,大概两周前我的所有账号也是都陆陆续续开发了beta测试的权限。然后就来研究了下这个新的 CI 系统是怎么回事。看介绍,和之前碰到的一些CI系统不太一样的地方是,Github是做了一个商店的功能。这样大家就可以自己定义自己的Action,然后方便别人复用。同时也可以统一自己的或者组织在构建过程中的一些公共流程。

目前 Github Action 的文档还是不是特别的齐全,有些东西找起来比较费劲,还要参考下别人写的成品来理解。我是先试着用 Github Action 来发布我的blog,然后想给 xresloader 的自动发布也改成 Github Action ,但是找了一圈发现没有合适的已有的Action,就自己写了一个。功能类似 travis-ci 的 Github Release Deployment,发布到了商店: https://github.com/marketplace/actions/uploadtogithubrelease

Workflow

Github Action 的workflow开始都是以仓库里的 .github/workflow/*.yml 为准。我实际测试了多个yml配置相同的name,在实际执行中都是会执行的,不过到 Actions 页面看的时候就会多个一样的名字。Github Action 附带了显示 badge 的功能,地址是 https://github.com/[仓库所有者名字]/[仓库名]/workflows/[encodeUri(workflow名)]/badge.svg ,但是目前为止,这个地址不包含分支名,所以它必须显示的是主分支的状态。这就有点不爽,比如我把自己的Action发布到v1分支,如果我不把主分支设置成v1,就只能显示master分支的构建状态。

执行环境

看到文档里说 Github Action 里有 ubuntu 、 macOS 和 Windows,里面自带的工具也是蛮齐全了。但是还是避免不了需要安装其他工具的。 Windows里带有chocolatey,macOS里带有homebrew,应该都还比较方便。我试了下ubutnu, sudo apt update -y && sudo apt upgrade -y 会导致一大坨更新,然后失败了。 直接 sudo apt update -y && sudo apt install 包 也失败了,不知道是不是依赖包版本的问题, sudo snap install 仍然会失败。 然后我看了下官方和别人的setup的action。都是直接去下载预编译包手动部署的。还是非常麻烦。

事件和上下文

Github Actionon 属性里的事件开始的。 Github Action 比较强大的地方是,除了常规的 *push定时事件 外,他还支持茫茫多的 github hook 事件。个人感觉这是它自己深度集成后对其他第三方服务的优势所在。不过有一些事件是可以带参数的,我看了老半天才看懂 https://help.github.com/en/articles/events-that-trigger-workflows 里说的 types 参数是怎么回事儿。截至我写这篇文章的时间,前面贴的链接里的文档已经更新了一版,现在应该对types参数更容易理解一些,里面也附带了一些sample,但是比如 push 事件是有 branches 参数和 tags 参数的,至少到目前为止这里还没有详细说明,也不知道是否有其他参数可以用, 而只有在 https://help.github.com/en/articles/workflow-syntax-for-github-actions#on 才有提及这两个参数的用法。

Github Action 的上下文的数据访问是结构化的,详见 https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions 。这个感觉比较好,以后扩展也会比较容易。其中 matrix 功能目测是对每个变量 foreach 的组合都会跑一遍, 而不是像 travis 或是 appveyor 那种是一个列表然后只是可以多个参数的模式。

Action 的使用

Github Action 的实际执行单元是里面的一个个的 action ,如果不use其他的action的话,就是普通的跑个脚本,像这样:

name: "find env"
  run: |
    echo "Hello World!"
    set | grep GITHUB_ | grep -v GITHUB_TOKEN

如果使用其他的action的话,按照现在的结构来看大约这样:

uses: xresloader/upload-to-github-release@v1
env:
  GITHUB_TOKEN: $
with:
  file: "*.md"
  tags: true
  draft: true

这里的 use 的是对应github仓库的 owner/repo 名字然后 @分支 。 环境变量可以通过 env 传入,插件参数通过 with 传入。不过按开发文档看,参数只能是字符串类型。

Action 开发

商店里已有的Action 满足不了需求的时候,还可以自己开发action用。其实 Github Action 自带的 actions 和我们自己没太大区别,不过就是官方带的可能用了一些不可言表的插件和奇奇怪怪的内部功能。

到目前位置, Github Action 的插件有两种,一种是 基于docker 的, 另一种是 基于nodejs 的。 我看了一些插件的实现,大多是 基于docker 的。不知道这个对跨平台是怎么实现的,比如运行环境是 Windows 但是 action是基于 ubuntu的docker, 毕竟docker不能跨内核。还是说上层虚拟机那层做了目录映射。

我只研究了下 基于nodejs 的action开发。插件的开发流程比较简单, 先是写一个 action.yml 文件描述插件,详情 https://help.github.com/en/articles/metadata-syntax-for-github-actions 里面有。完了以后github的仓库主页里就直接会提示你是否要把action publish到Marketplace里,也会多一个按钮说是可以一键使用到你的仓库里。插件本身带有输入参数和输出参数。输出参数会输出到 steps.<step id>.outputs.<output name> 的上下文里,方便后续其他action使用。

基于nodejs 的action,官方提供了一些 工具npm包 用于方便action,感觉还是停方便实用的。 我一开始想直接用Github v4的graphql API 来写插件的,但是目前的graphql API好像还没法上传文件。而我本来就是因为现有没有特别合适的上传release文件到Github Release里想开发个上传文件的action。 而 Github v3的rest APIGithub v4的graphql API 混用反而徒增麻烦,所以目前还是先用 v3 了,所幸action功能比较简单,以后万一升 Github v4的graphql API 也比较容易。

好久没写nodejs,顺便试了试nodejs的Promise、await。用起来各种爽啊,还试了下 yarn 。前端的工具真的是日新月异呀。目前action的调试非常麻烦,我还是新建了一个测试仓库,通过不断触发来log调试的。官方给的调试方法目前也只有这个。不知道是否哪天 Github 会提供个什么调试环境让这个过程更容易一些。前面也说了,按开发文档看,参数只能是字符串类型。但是我需要上传多个文件,所以对于需要数组的我都是采用了 用;分割的字符串 的形式。代码里拆成数组。

Action - Upload To Github Release

最后广告一波我写的插件啦。功能和 travis 的 Deployment to Github Release 差不多,基本上就是后续我一些项目的自动发布迁移后的替代品。

商店地址: https://github.com/marketplace/actions/uploadtogithubrelease 仓库地址: https://github.com/xresloader/upload-to-github-release

完整语法及默认参数:

uses: xresloader/upload-to-github-release@v1
env:
  GITHUB_TOKEN: $   # (必须)token,每个仓库的workflow会自动带一个 $ ,直接用这个即可
with:
  file: ""                                    # (必须)要上传的文件路径,支持通配符,多个用分号(;)隔开
  overwrite: false                            # (可选)如果有同名文件是否覆盖
  tags: false                                 # (可选)是否只处理有tag的事件
  draft: true                                 # (可选)如果需要创建新Release,是否是草稿Release
  prerelease: false                           # (可选)如果需要创建新Release,是否是Prerelease
  branches: ""                                # (可选)是否只处理执行分支的事件,多个用分号(;)隔开

输出参数:

  • release_name: Release的名字
  • release_url: Release的URL地址
  • release_tag_name: Release绑定的tag名字
  • release_commitish: Release的提交号

测试用的仓库里有一些例子说不定可以用来参考: https://github.com/xresloader/upload-to-github-release-test