从 GitHub 操作推送到源

2023-11-27

我正在努力推动origin远程 GitHub 操作。我的行动逻辑是:

  • handle pull_request_review事件并按评论消息过滤
  • 签出到 master,合并 PR 分支,运行一些检查并将其推送到origin

脚本是:

if [[ "${GITHUB_EVENT_NAME}" != "pull_request_review" ]]; then
  echo "unsupported event: ${GITHUB_EVENT_NAME}"
  exit 1
fi

user=$(jq -r .review.user.login ${GITHUB_EVENT_PATH})
cmd=$(jq -r .review.body ${GITHUB_EVENT_PATH})
echo "reviewer is ${user}, command is ${cmd}"

if [[ "${cmd}" == "merge" ]]; then
  head=$(jq -r .pull_request.head.ref ${GITHUB_EVENT_PATH})
  git config user.email [email protected]
  git config user.name test
  git checkout -B _tmp origin/${head}
  git checkout -B master origin/master
  git merge --no-ff _tmp
  git push origin master
fi

我正在运行这个脚本alpine:3.10Docker 容器:

FROM alpine:3.10

LABEL "com.github.actions.name"="Hello world action"
LABEL "com.github.actions.icon"="shield"
LABEL "com.github.actions.color"="green"

WORKDIR /app
COPY action.sh action.sh
RUN apk --update add bash git jq
CMD ["bash", "/app/action.sh"]

第一步工作正常(签出和合并),但操作未能将合并推送到origin因为错误:

+ git推送原点大师
致命:无法读取“的用户名”https://github.com': 没有这样的设备或地址

看起来 GitHub-action Docker 容器未配置为推送到 GitHub。我该如何配置它?是否可以使用其中的一些环境变量由 GitHub 提供或可能是一些已安装的文件(例如/github/* path)?


actions/checkout@v2 及以上

从 checkout 版本 2 开始,分离的 HEAD 状态问题已得到解决,并简化了推送到原点的过程。

name: Push commit
on: push
permissions:
  contents: write
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Create report file
        run: date +%s > report.txt
      - name: Commit report
        run: |
          git config --global user.name 'Your Name'
          git config --global user.email '[email protected]'
          git commit -am "Automated report"
          git push

如果您需要推送事件来触发其他工作流程,请使用repo scoped 个人访问令牌.

      - uses: actions/checkout@v3
        with:
          token: ${{ secrets.PAT }}

actions/checkout@v1(原始答案)

为@rmunn 的优秀答案添加一些进一步的细节。问题是actions/checkout@v1操作使 git 存储库处于分离的 HEAD 状态。有关更多详细信息,请参阅此问题:https://github.com/actions/checkout/issues/6

这是一个完整的示例,演示如何使签出的存储库达到可用状态并推送到远程。

name: Push commit
on: push
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Create report file
        run: date +%s > report.txt
      - name: Commit report
        run: |
          git config --global user.name 'Your Name'
          git config --global user.email '[email protected]'
          git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY
          git checkout "${GITHUB_REF:11}"
          git commit -am "Automated report"
          git push

要包含未跟踪的(新)文件,请更改工作流程以使用以下内容。

          git add -A
          git commit -m "Automated report"

上述工作流程应该适用于大多数事件。为了on: pull_request合并分支的工作流程(GITHUB_HEAD_REF)应该被签出以替换默认的合并提交。

重要的:如果除了以下工作流程之外您还有其他拉取请求检查,那么您必须使用个人访问令牌而不是默认的GITHUB_TOKEN。 这是由于 GitHub Actions 对工作流引发的事件(例如push) 无法触发进一步的工作流程运行。 这是为了防止意外的“无限循环”情况,并作为一种反滥用措施。 用一个repo scoped 个人访问令牌是一个经过批准的解决方法。看这个 GitHub 问题有关解决方法的更多详细信息。

name: Push commit on pull request
on: pull_request
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
        with:
          ref: ${{ github.head_ref }}
      - name: Create report file
        run: date +%s > report.txt
      - name: Commit report
        run: |
          git config --global user.name 'Your Name'
          git config --global user.email '[email protected]'
          git remote set-url origin https://x-access-token:${{ secrets.PAT }}@github.com/${{ github.repository }}
          git commit -am "Automated report"
          git push

有关在执行期间推送到原点的更多示例on: pull_request工作流程请参阅这篇博文,GitHub Actions:如何在拉取请求中自动设置代码格式.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 GitHub 操作推送到源 的相关文章

  • 通过 cron 进行 git 推送

    我正在尝试运行git push来自 cron 当我在 shell 上以交互方式执行命令时 一切顺利 从我的用户的 crontab 运行命令时 cron 会传递错误消息 Permission denied publickey 我认为这与查找或
  • 反向合并具有干净历史记录的缝合功能分支

    我有这个 d0 f1 d1 d2 f2 d3 merge d4 f3 merge
  • Travis CI - 如何推送到主分支?

    我有一个连接到 GitHub 的 Travis CI 项目 它尝试更新 Github 存储库中的内容并将它们推送回 GitHub 包括 master 和 gh pages 分支 然而 虽然我的 travis ci 日志文件显示一切正常 但我
  • 如何使用 github 托管外部 CSS 文件?

    我将 css 上传到 github 然后转到网站上的文件并单击 raw 选项 我尝试将其添加到网页中 但 chrome 给出以下错误 资源解释为样式表 但使用 MIME 类型 text plain 进行传输 https raw github
  • 使用入口点脚本初始化 influxdb2 存储桶

    我正在部署用于存储实时数据的 influxdb 我已经使用 1 8 4 一段时间了 最 近决定更新到 v2 My docker compose yml文件看起来像这样 influxdb image influxdb 2 0 4 alpine
  • 如何从另一个目录使用git?

    假设有如下文件夹结构 repos repo1 lt here is git repository I do cd repos 我现在如何使用存储库 repo1仍然在repos目录 我不想做 cd repo1 git status git c
  • 克隆/推送 Git Repos 时出错 443:访问错误,但未使用代理

    当使用 git 远程存储库进行这些操作克隆 推送时 我遇到了非常奇怪的问题 假设我正在尝试将更改推送到远程存储库 git push origin master 然后我会得到这个错误 致命 无法访问 Remote Repo 无法连接到 git
  • Git在Windows中的克隆比在Linux中慢得多

    我一直在追寻 Windows 上 github 克隆速度极慢的问题 Linux kali 没有这个问题 我的下行连接速度为 100 40 megabit s 我可以获得接近 8mb s 的下载速度 没有问题 我已将电脑直接插入互联网插座 无
  • Git 中的错误 - 致命:“/Users/username/Downloads/folder_name”位于存储库之外

    当我向 git 添加新项目时 出现此错误 Error fatal Users username Downloads folder name is outside repository 如何摆脱这个错误 我想 我需要给出当前的工作目录 但是
  • 有没有办法搜索 github wiki 页面?

    我添加了一个维基页面 https github com avidanyum spray tomcat example wiki到 github 存储库 但是当我在 github 中搜索示例文本时 this is a very nice wi
  • “无法同时更新路径和切换到分支”

    我有时会使用checkout b创建新分支的选项 同时将其签出并在一个命令中设置跟踪 在新环境中 我收到此错误 git checkout b test track origin master fatal Cannot update path
  • 尝试编译 git 但在 linux 中找不到 libcurl

    我想编译支持 http https 的 git 我有 ls usr include curl curlbuild h curl h curlrules h curlver h easy h mprintf h multi h stdchea
  • Docker 容器是否有自己的 TCP/IP 堆栈?

    我试图了解来自连接到主机的线路并定向到 Docker 容器内的应用程序的网络数据包在幕后发生了什么 如果它是一个经典的 VM 我知道到达主机的数据包将由虚拟机管理程序 例如 VMware VBox 等 传输到 VM 的虚拟 NIC 并从那里
  • Docker 容器可以访问 DNS,但无法解析主机

    我在运行 docker 容器时遇到一个有趣的问题 突然间 我无法从容器内解析 DNS 这是一个概要 一切都没有解决 apt get pip 一次性 ping 容器等正在运行docker run it dns 8 8 8 8 ubuntu p
  • udevadm 不显示 docker 容器内的所有属性

    当我运行 docker 容器并列出某些设备的属性时udevadm容器内部只有设备的基本信息 当我在主机上做同样的事情时 我可以看到更多 我该如何获取容器内的所有信息 host udevadm info query property dev
  • docker 中带有参数的 jar 文件

    Helo 我有一个 java jar 文件 当我从终端运行它时 它会接受一堆参数作为输入 我想制作一个 docker 映像并运行它 其中包含 jar 文件 我仍然可以在其中传递 jar 文件的参数 将 jar 文件设置为您的入口点 http
  • 如何在提交后删除本地 git 历史记录?

    我想从 Dropbox 切换到开源 Sparkleshare 它使用 git 进行同步和版本控制 如果说我在文件夹中删除了一个 1GB 文件 它会保留在本地 git 文件夹的历史记录中 但我希望将这种大量数据放在服务器上而不是客户端上 如何
  • 使用 mariaDB 将 sql 转储文件安装到 docker 容器

    我刚刚学习 docker 的基础知识 但一直停留在从本地系统导入 SQl 文件上 我使用的是 Windows 10 并允许我的 docker 容器访问我的共享驱动器 我有一个位于 D 上的 SQL 文件 我想导入到从 docker hub
  • 撤消 git pull,如何将存储库恢复到旧状态

    有什么方法可以恢复或撤消 git pull 以便我的源 存储库将恢复到执行 git pull 之前的旧状态 我想这样做是因为它合并了一些我不想这样做的文件 但只合并了其他剩余的文件 那么 我想找回这些文件 可以吗 编辑 我想撤消 git m
  • Git:切换工作区(计算机)而不提交

    有没有办法在不进行提交 签出的情况下应用差异补丁或类似补丁 我的情况 我工作时经常在计算机之间切换 我的提交历史有一堆 开关机 消息 我最初的猜测是这可能会导致其他麻烦 但我想我可能会问是否有适合这种情况的合适的解决方案或工作流程 编辑 澄

随机推荐

  • rgdal 包纬度/经度 -> UTM

    有人能看出这有什么问题吗 library rgdal Make a two column matrix col1 long col2 lat xy lt cbind c 107 c 26 Convert it to UTM coordina
  • 使用 Numpy 和 Cython 加速距离矩阵计算

    考虑一个维度为 NxM 的 numpy 数组 A 目标是计算欧几里德距离矩阵 D 其中每个元素 D i j 是行 i 和 j 之间的欧几里德距离 最快的方法是什么 这并不完全是我需要解决的问题 但它是我正在尝试做的事情的一个很好的例子 一般
  • 从电子邮件提交表格

    我正在开发一个通过电子邮件提交表单的项目 场景是这样的 我们将向电子邮件列表发送一份表格 客户必须在其中填写表格 一旦他们点击 提交 就应该提交表格 并且服务器应该能够检索填写者提供的值 当我尝试过 它没有将提交按钮视为表单提交 并且没有执
  • 在关系数据库中,我们可以拥有一个与其他表没有任何关系的表吗?

    在关系数据库中 我们可以拥有一个与其他表没有任何关系的表吗 是的 关系的表达方式是使用外键 如果您生成的表没有外键 并且其他表中没有外键指向该表 则它没有关系 不过 以后仍然可以建立关系 所以不要担心搬起石头砸自己的脚
  • 如何访问R中传单生成的地图

    假设我有这样的代码 Install devtools if needed if require devtools install packages devtools view rawif devtools R hosted with by
  • 如何在 git 中设置临时存储库?

    我想创建一个存储库 B 在名为 x master 的分支中跟踪远程存储库的主服务器 A 它自己的主控在初始创建时也应该是一个克隆 其他 开发人员 可以克隆并将更改推送到其中 有时 由于 A 中有更改 我需要能够将它们拉下来并将它们合并到 B
  • std::ifstream 缓冲区缓存

    在我的应用程序中 我试图合并排序的文件 当然要保持它们排序 因此我必须迭代两个文件中的每个元素 以将最小值写入第三个文件 这在大文件上运行得相当慢 因为我没有看到任何其他选择 必须完成迭代 我正在尝试优化文件加载 我可以使用一定量的 RAM
  • SQL CTE 和 ORDER BY 影响结果集

    我在下面粘贴了一个非常简化的 SQL 查询版本 我遇到的问题是ORDER BY语句正在影响我的 CTE 的选择结果 我一直无法理解为什么会这样 我最初的想法是在 CTE 中 我执行了一些SELECT声明 然后ORDER BY应该致力于那些结
  • Kotlin 协程中的 launch/join 和 async/await 有什么区别

    In the kotlinx coroutines库 您可以使用以下任一方式启动新的协程launch with join or async with await 它们之间有什么区别 launch习惯于即发即忘协程 这就像开始一个新线程 如果
  • imap_unordered,但带有惰性扁平生成器

    我有一个已经可以解决的问题multiprocessing Pool但解决方案并不是非常理想 也就是说 我拥有一组相当小的输入 每个输入都映射到一个大数据集 虽然我可以使用imap unordered对于返回列表的函数 这远非高效 因为每个大
  • PHP 生成的 csv 文件在 Excel 2007 中显示英镑符号 (£) 的 £

    我使用以下标头命令生成 csv 文件 header Content type text csv charset utf 8 encoding utf 8 header Content Disposition attachment filen
  • 32 位系统上的 Java 10(及更高版本)

    据我所知 oracle 没有计划为 32 位提供 java 但也许我误解了情况 如果我是对的 如果我们需要支持 32 位库 dll 我们该怎么办 那么 32 位操作系统又如何呢 目前这似乎对未来产生巨大影响 但正如我所说 也许我错了 事实上
  • 在 PyQt 中(很好地)显示代数表达式 [重复]

    这个问题在这里已经有答案了 在我的 python 程序中 有一个我创建的数学对象的层次结构 它们代表数学公式 例如 有Collection 这是一系列Equations 这是一个包含两个的容器Sums Products Quotients
  • 设置autoDeploy和deployOnStartup会导致应用程序在启动时部署两次?

    我正在阅读 Damonar Chetty 撰写的 Tomcat 6 开发人员指南 他在主机章节中说道 将两者设置为 true 将导致应用程序在启动时部署 然后在 Tomcat 启动并运行后再次部署 因此 请确保至少将其中一项设置为 fals
  • 在 foreach 循环内部或外部声明变量:哪个更快/更好?

    其中哪一个更快 更好 这个 List
  • 在 Java 中使用 BouncyCastle 通过 ECIES 进行加密

    我正在尝试使用 Java 中的 BouncyCastle 使用 ECC 算法加密一些内容 但我收到 BouncyCastle 库的异常 说无法投射JCEECPublicKey to IESKey 据我了解 生成的公钥KeyPairGener
  • mvc4 项目中的 Intellisense 无法在 vs 2012 professional 中工作?

    在我的剃刀视图中 智能感知不起作用 有解决这个问题的方法吗 我正在使用新发布的 VS 2012 Professional 并构建一个 ASP NET MVC 4 项目 我的剃刀视图中的智能感知不起作用 有什么解决办法吗 对我有帮助的是删除
  • Android - 如何动态更改片段布局

    我有一个平板电脑应用程序 其中包含一个显示我公司数据的 about 片段 我想在页面上时根据屏幕方向动态更改布局 但我还没有找到方法 如果有人找到解决方案 请提前致谢 Yume177 我找到了怎么做 Override public void
  • Git 子模块在 TFS Build 上失败

    当我尝试使用 TFS 和 Git 进行构建时 存在一个限制 即 TFS 的 git 提供程序尚不支持子模块 有点痛苦 但到底是什么 我可以告诉 TFS 在编译之前运行批处理文件 我用它来调用手动 git 脚本来更新我的 超级 项目中的所有子
  • 从 GitHub 操作推送到源

    我正在努力推动origin远程 GitHub 操作 我的行动逻辑是 handle pull request review事件并按评论消息过滤 签出到 master 合并 PR 分支 运行一些检查并将其推送到origin 脚本是 if GIT