我有一个 GitHub Action,它可以在任何推送到我的存储库时运行。基本上,它编译存储库文件,提交编译的文件,压缩提交到前一个文件,然后强制推送到存储库。
从本质上讲,这个想法是它无缝地创建一个构建并将其添加到存储库中,使其看起来像是原始推送的一部分。
我遇到的唯一问题是git config. 我希望能够复制上次提交的user.name和,这样当我的操作执行提交时,看起来就像是由推送的用户完成的。user.email我知道我可以使用GITHUB_ACTOR环境变量来获取用户名,但似乎没有提供电子邮件的环境变量。GitHub 发现它们并不相同:
那么,如何设置git config使用上次提交的user.name和呢?user.email
.yaml为了完整起见,以下是该操作的文件:
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Set up Git repository
uses: actions/checkout@v2
with:
fetch-depth: 2
- (... step that creates build files ...)
- name: Upload build files to repo
run: |
# Configure git
git config user.name "$GITHUB_ACTOR"
git config user.email "<>"
# Roll back git history to before last commit …Run Code Online (Sandbox Code Playgroud) 我有一个非常大的 Go 项目,依赖于github.com/golang/mock. 不幸的是,这个包不再维护,开发人员已指示人们使用位于 的 fork go.uber.org/mock。所以我想用 替换github.com/golang/mock依赖项go.uber.org/mock。
据我了解,这正是 go.modreplace指令的用途(允许您替换依赖项,而不必更改每个文件中的导入路径)。因此,用 fork 替换此模块应该很简单,只需将以下行添加到 my go.mod:
replace github.com/golang/mock => go.uber.org/mock v0.2.0
Run Code Online (Sandbox Code Playgroud)
不幸的是,当尝试运行任何go命令时,这会导致错误:
$ go mod tidy
...
go: go.uber.org/mock@v0.2.0 used for two different module paths (github.com/golang/mock and go.uber.org/mock)
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
如有必要,您可以在此处查看存储库/提交。
我正在尝试使用sort.SliceGo 标准库对字符串切片进行排序。我希望它们按字母顺序排序,但我希望空字符串出现在所有其他字符串之后(因此我不能只使用sort.Strings)。
对于 less 函数,我认为这会起作用:
func(i, j int) bool {
return s[j] == "" || s[i] < s[j]
}
Run Code Online (Sandbox Code Playgroud)
但是,我似乎会根据输入顺序得到随机答案。这是一个 MWE:
package main
import (
"fmt"
"math/rand"
"sort"
"time"
)
func main() {
s := []string{"", "foo", "bar", "baz"}
rand.Seed(time.Now().Unix())
rand.Shuffle(len(s), func(i, j int) {
s[i], s[j] = s[j], s[i]
})
fmt.Printf("%q\n", s)
sort.Slice(s, func(i, j int) bool {
return s[j] == "" || s[i] < s[j]
})
fmt.Printf("%q\n", s)
}
Run Code Online (Sandbox Code Playgroud)
这是运行几次的输出:
$ go …Run Code Online (Sandbox Code Playgroud)