当前位置: 首页 > news >正文

github中action作用和讲解

1,简介

GitHub Actions 是 GitHub 的一个自动化功能,它允许你在 GitHub 仓库中自动执行软件开发工作流程。你可以使用 GitHub Actions 来执行各种任务,比如:

  1. 自动测试:每当代码被推送到仓库时,自动运行测试来确保代码质量。
  2. 持续集成:自动构建和部署代码,确保新的代码更改不会破坏现有功能。
  3. 代码格式化:自动格式化代码,以保持代码风格的一致性。
  4. 自动部署:将代码部署到服务器或云平台。
  5. 自动化发布:自动创建版本发布和更新软件包。
  6. 监控:监控应用程序和基础设施,以确保它们正常运行。
  7. 自动化工作流:创建复杂的工作流,以自动化多个步骤和任务。

GitHub Actions 通过定义在 .github/workflows 目录中的 YAML 文件来配置。这些工作流可以触发于各种事件,如推送、拉取请求、定时任务等。你可以使用 GitHub 提供的预设操作(actions),也可以创建自己的自定义操作。

2,如何使用action

使用 GitHub Actions 来自动化你的工作流程涉及几个步骤,下面是基本的流程:

  1. 创建工作流文件

    • 在你的 GitHub 仓库中,找到或创建一个名为 .github/workflows 的目录。
    • 在这个目录下,创建一个新的 YAML 文件来定义你的工作流。文件名可以是任意的,但必须以 .yml 或 .yaml 结尾。
  2. 定义工作流内容

    • 工作流文件的基本结构包括触发器(on)、作业(jobs)和步骤(steps)。
    • 触发器定义了何时运行工作流,例如,当代码被推送到仓库时。
    • 作业是工作流中的一个执行单元,它可以包含多个步骤。
    • 步骤是作业中的单个任务,比如运行脚本或使用操作(action)。
  3. 使用操作(Actions)

    • 操作是 GitHub Actions 的核心,它们是可重用的代码片段,用于执行特定的任务。
    • 你可以使用社区提供的现成操作,或者创建自己的操作。
    • 在步骤中,通过 uses 关键字指定要运行的操作。
  4. 配置工作流

    • 你可以配置工作流以使用不同的环境变量、设置权限、使用不同的运行器(如不同的操作系统或硬件配置)等。
  5. 运行工作流

    • 一旦你推送了工作流文件到仓库,工作流就会根据你定义的触发器自动运行。
    • 你可以在 GitHub 仓库的 "Actions" 标签页中查看工作流的运行状态和历史。
  6. 调试和修改

    • 如果工作流运行失败,你可以查看日志来调试问题。
    • 根据需要调整工作流文件,然后再次推送以测试更改

下面是一个简单的 GitHub Actions 工作流示例,它在每次推送到 main 分支时运行一个简单的 Node.js 脚本:

name: Node.js CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '14'
    - run: npm ci
    - run: npm run build

在这个例子中:

  • name 定义了工作流的名称。
  • on 指定了触发工作流的事件,这里是 push 事件。
  • jobs.build 定义了一个名为 build 的作业。
  • runs-on 指定了运行作业的虚拟机环境。
  • steps 定义了作业中的步骤,包括检出代码、设置 Node.js 环境、安装依赖和构建项目。

3, 实例

以下是一个编译Android13的工作流:

name: Build Kernel - Android 13
on:
  push:
    branches: ["main", "ci", "checkci"]
    paths:
      - ".github/workflows/build-kernel-a13.yml"
      - ".github/workflows/gki-kernel.yml"
      - ".github/scripts/build_a13.sh"
      - "kernel/**"
  pull_request:
    branches: ["main"]
    paths:
      - ".github/workflows/build-kernel-a13.yml"
      - ".github/workflows/gki-kernel.yml"
      - ".github/scripts/build-a13.sh"
      - "kernel/**"
  workflow_call:
jobs:
  build-kernel:
    if: github.event_name != 'pull_request' && github.ref != 'refs/heads/checkci'
    strategy:
      matrix:
        include:
          - version: "5.10"
            sub_level: 189
            os_patch_level: 2023-11
          - version: "5.10"
            sub_level: 198
            os_patch_level: 2024-01
          - version: "5.10"
            sub_level: 205
            os_patch_level: 2024-03
          - version: "5.10"
            sub_level: 209
            os_patch_level: 2024-05
          - version: "5.10"
            sub_level: 210
            os_patch_level: 2024-06
          - version: "5.10"
            sub_level: 214
            os_patch_level: 2024-07
          - version: "5.10"
            sub_level: 218
            os_patch_level: 2024-08
          - version: "5.15"
            sub_level: 123
            os_patch_level: 2023-11
          - version: "5.15"
            sub_level: 137
            os_patch_level: 2024-01
          - version: "5.15"
            sub_level: 144
            os_patch_level: 2024-03
          - version: "5.15"
            sub_level: 148
            os_patch_level: 2024-05
          - version: "5.15"
            sub_level: 149
            os_patch_level: 2024-07
          - version: "5.15"
            sub_level: 151
            os_patch_level: 2024-08
    uses: ./.github/workflows/gki-kernel.yml
    secrets: inherit
    with:
      version: android13-${{ matrix.version }}
      version_name: android13-${{ matrix.version }}.${{ matrix.sub_level }}
      tag: android13-${{ matrix.version }}-${{ matrix.os_patch_level }}
      os_patch_level: ${{ matrix.os_patch_level }}
      patch_path: ${{ matrix.version }}
  
  upload-artifacts:
    needs: build-kernel
    runs-on: ubuntu-latest
    if: ${{ ( github.event_name != 'pull_request' && github.ref == 'refs/heads/main' ) || github.ref_type == 'tag' || github.ref == 'refs/heads/ci' }}
    env:
      CHAT_ID: ${{ secrets.CHAT_ID }}
      BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
      MESSAGE_THREAD_ID: ${{ secrets.MESSAGE_THREAD_ID }}
      COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
      COMMIT_URL: ${{ github.event.head_commit.url }}
      RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v4

      - uses: actions/checkout@v4
        with:
          path: KernelSU
          fetch-depth: 0

      - name: List artifacts
        run: |
          tree

      - name: Download prebuilt toolchain
        run: |
          AOSP_MIRROR=https://android.googlesource.com
          BRANCH=main-kernel-build-2024
          git clone $AOSP_MIRROR/platform/prebuilts/build-tools -b $BRANCH --depth 1 build-tools
          git clone $AOSP_MIRROR/kernel/prebuilts/build-tools -b $BRANCH --depth 1 kernel-build-tools
          git clone $AOSP_MIRROR/platform/system/tools/mkbootimg -b $BRANCH --depth 1
          pip3 install telethon

      - name: Set boot sign key
        env:
          BOOT_SIGN_KEY: ${{ secrets.BOOT_SIGN_KEY }}
        run: |
          if [ ! -z "$BOOT_SIGN_KEY" ]; then
            echo "$BOOT_SIGN_KEY" > ./kernel-build-tools/linux-x86/share/avb/testkey_rsa2048.pem
          fi

      - name: Bot session cache
        id: bot_session_cache
        uses: actions/cache@v4
        if: false
        with:
          path: scripts/ksubot.session
          key: ${{ runner.os }}-bot-session

      - name: Build boot images
        run: |
          export AVBTOOL=$GITHUB_WORKSPACE/kernel-build-tools/linux-x86/bin/avbtool
          export GZIP=$GITHUB_WORKSPACE/build-tools/path/linux-x86/gzip
          export LZ4=$GITHUB_WORKSPACE/build-tools/path/linux-x86/lz4
          export MKBOOTIMG=$GITHUB_WORKSPACE/mkbootimg/mkbootimg.py
          export UNPACK_BOOTIMG=$GITHUB_WORKSPACE/mkbootimg/unpack_bootimg.py
          cd $GITHUB_WORKSPACE/KernelSU
          export VERSION=$(($(git rev-list --count HEAD) + 10200))
          echo "VERSION: $VERSION"
          cd -
          bash $GITHUB_WORKSPACE/KernelSU/.github/scripts/build_a13.sh

      - name: Display structure of boot files
        run: ls -R

      - name: Upload images artifact
        uses: actions/upload-artifact@v4
        with:
          name: boot-images-android13
          path: Image-android13*/*.img.gz

  check-build-kernel:
    if: (github.event_name == 'pull_request' && !github.event.pull_request.draft) || github.ref == 'refs/heads/checkci'
    strategy:
      matrix:
        include:
          - version: "5.10"
            sub_level: 218
            os_patch_level: 2024-08
          - version: "5.15"
            sub_level: 151
            os_patch_level: 2024-08
    uses: ./.github/workflows/gki-kernel.yml
    with:
      version: android13-${{ matrix.version }}
      version_name: android13-${{ matrix.version }}.${{ matrix.sub_level }}
      tag: android13-${{ matrix.version }}-${{ matrix.os_patch_level }}
      os_patch_level: ${{ matrix.os_patch_level }}
      patch_path: ${{ matrix.version }}

对上面的工作流文件的详细解释:

工作流名称
name: Build Kernel - Android 13:定义了工作流的名称。
触发器 on
push:当向 main、ci 或 checkci 分支推送代码时触发。
pull_request:当向 main 分支发起拉取请求时触发。
workflow_call:允许其他工作流调用此工作流。
paths:指定了触发工作流的文件路径,只有当这些文件被修改时,工作流才会运行。
作业 jobs
build-kernel:定义了一个名为 build-kernel 的作业。
if:条件语句,用于确定何时运行作业。这里排除了 pull_request 事件和 checkci 分支。
strategy.matrix:定义了一个矩阵策略,用于生成不同的作业变体。每个变体都有不同的 version、sub_level 和 os_patch_level。
uses:指定了要使用的另一个工作流文件 gki-kernel.yml。
secrets:设置为 inherit,意味着这个作业将继承父工作流的所有秘密(如 API 密钥等)。
with:传递参数到 gki-kernel.yml 工作流。
上传工件 upload-artifacts
needs:指定这个作业依赖于 build-kernel 作业。
runs-on:指定在 ubuntu-latest 虚拟机上运行。
if:条件语句,用于确定何时运行这个作业。这里包括了主分支的推送、标签的创建或 ci 分支的推送。
env:定义了环境变量,这些变量通常用于配置通知或其他脚本。
steps:定义了作业的步骤,包括下载工件、检出代码、列出工件、下载预构建工具链、设置引导签名密钥、缓存机器人会话、构建引导镜像、显示引导文件结构和上传引导镜像工件。
检查构建 check-build-kernel
if:条件语句,用于确定何时运行这个作业。这里包括了非草稿的拉取请求或 checkci 分支。
strategy.matrix:定义了一个矩阵策略,用于生成不同的作业变体。
uses:指定了要使用的另一个工作流文件 gki-kernel.yml。
with:传递参数到 gki-kernel.yml 工作流。

相关文章:

github中action作用和讲解

1,简介 GitHub Actions 是 GitHub 的一个自动化功能,它允许你在 GitHub 仓库中自动执行软件开发工作流程。你可以使用 GitHub Actions 来执行各种任务,比如: 自动测试:每当代码被推送到仓库时,自动运行测试…...

数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)

数据库管理238期 2024-09-04 数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)1 架构图2 分片数据库与分片3 Shard Catalog4 Shard Director5 Global Service6 管理界面总结 数据库管理-第238期 23ai:全球分布式数…...

GIT | git提交注释自动添加信息头

GIT | git提交注释自动添加信息头 时间:2024年9月6日10:20:11 文章目录 GIT | git提交注释自动添加信息头1.操作2.commit-msg文件 1.操作 2.commit-msg文件 #!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit&q…...

React 全屏问题解决方案

1、全屏下弹窗被遮挡的问题 参考:https://www.jianshu.com/p/b22d1ad9533e 原因: 需要全屏的节点部分被传入 screenfull 中,弹窗的层级永远低于全屏,所以被遮挡。 解决方法: 方式1:把整个 body 全屏&…...

Java JVM 垃圾回收算法详解

Java 虚拟机(JVM)是运行 Java 应用程序的核心,它的垃圾回收(Garbage Collection, GC)机制是 JVM 中非常重要的一个部分。垃圾回收的主要任务是自动管理内存,回收那些不再被使用的对象,从而释放内…...

hadoop dfs web页面访问增加鉴权

前言 装好了Hadoop,通过浏览器访问,发现竟然不需要鉴权就能访问,且暴露了很多服务器层文件路径信息,基于多年积累的安全意识,必须得配置些鉴权信息,就有了该文,仅做学习记录,下次自…...

LCP 485. 最大连续 1 的个数[lleetcode -11]

从今天起,我们的算法开始研究搜索,首先就是DFS深度优先搜索(depth-first seach,DFS)在搜索到一个新的节点时,立即对该新节点进行遍 历;因此遍历需要用先入后出的栈来实现,也可以通过…...

关于宏任务的说法已经过时

关于宏任务w3c的最新解释,(mdn已经搜不到宏任务队列) ● 每个任务都有一个任务类型,用一个类型的任务必须在一个队列,不同类型的任务可以分属不同的队列。在一次事件循环当中,浏览器可以根据实际情况从不同…...

Java箱与泛型

大O的渐进表示法 大 O 的渐进表示法 去掉了那些对结果影响不大的项 &#xff0c;简洁明了的表示出了执行次数。 void func1(int N){ int count 0; for (int i 0; i < N ; i) { for (int j 0; j < N ; j) { count; } } for (int k 0; k < 2 * N ; k) { count; } in…...

QT如何判断一个文件是否存在

在Qt中&#xff0c;判断一个文件是否存在是一个常见的操作&#xff0c;可以通过QFile类和QDir类来实现。不过&#xff0c;对于简单的文件存在性检查&#xff0c;QFile类提供的接口更为直接。下面是一个使用QFile类来判断文件是否存在的例子&#xff1a; #include <QFile>…...

Vim笔记

【指尖飞舞&#xff1a;vscode vim 高效开发&#xff08;系列视频&#xff09;】https://www.bilibili.com/video/BV1z541177Jyp16&vd_source23e4761174881d73295e362ffd706749 Vscode vim插件配置-CSDN博客 g_跳到行尾最后一个非空字符 gd :go to definition ctrl (o): …...

宝塔部署Vue项目解决跨域问题

一、前言 使用宝塔面板部署前端后端项目相比用命令行进行部署要简单许多&#xff0c;宝塔的可视化操作对那些对Linux不熟悉的人很友好。使用宝塔部署SpringBoot后端项目和Vue前端项目的方法如下&#xff1a; 1、视频教程 2、文字教程1 3、文字教程2 以上的教程完全可以按照步骤…...

C++智能指针简述

auto_ptr 设计目的&#xff1a;超出作用域&#xff0c;自动释放内存。所有权传递&#xff1a;拷贝auto_ptr时&#xff0c;原指针失效&#xff0c;释放所有权&#xff1b;新指针获得所有权。总而言之&#xff0c;允许通过拷贝转移所有权&#xff0c;独占所有权。缺陷&#xff1…...

龙芯+FreeRTOS+LVGL实战笔记(新)——05部署主按钮

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了改进和优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以…...

Android Camera系列(二):TextureView+Camera

两岸猿声啼不住&#xff0c;轻舟已过万重山—李白 Android Camera系列&#xff08;一&#xff09;&#xff1a;SurfaceViewCamera Android Camera系列&#xff08;二&#xff09;&#xff1a;TextureViewCamera Android Camera系列&#xff08;三&#xff09;&#xff1a;GLS…...

DFS算法专题(一)——二叉树中的深搜【回溯与剪枝的初步注入】

目录 1、DFS算法简介 2、算法实战应用【leetcode】 2.1 计算布尔二叉树的值 2.1.1 算法原理 2.1.2 算法代码 2.2 求根节点到叶节点数字之和 2.2.1 算法原理 ​2.2.2 算法代码 2.3 二叉树剪枝 2.3.1 算法原理 2.3.2 算法代码 2.4 验证二叉搜索树 2.4.1 算法原理 …...

AWS SES服务 Golang接入教程(排坑版)

因为刚来看的时候 也迷迷糊糊的 所以 先讲概念 再上代码 一 基础设置 这里需要完成两个最基础的设置任务 1 是验证至少一个收件电子邮箱 2 【很关键】是验证发送域。即身份里的域类型的身份。&#xff08;可以理解为配置你的域名邮箱服务器&#xff08;SMPT&#xff09;为亚马…...

Vite + Vue3 +Vant4出现Toast is not a function

今天写前端的时候出现了这个问题搞了我一会 搜集原因: 1:是vant版本的问题&#xff0c;Toast()的方法是vant3版本的写法&#xff0c;而我用的是vant4&#xff0c;vant4中的写法改成了showToast()方法&#xff0c;改正过来 import {showToast} from "vant"; 发现还是…...

【MATLAB】模拟退火算法

模拟退火算法的MATLAB实现 模拟退火算法简介模拟退火算法应用实例关于计算结果 模拟退火算法简介 1982年&#xff0c;Kirkpatrick 将退火思想引入组合优化领域&#xff0c;提出了一种能够有效解决大规模组合优化问题的算法&#xff0c;尤其对 NP 完全问题表现出显著优势。模拟…...

什么是Kubernetes RBAC?

什么是Kubernetes RBAC? 1、什么是RBAC?2、核心组件3、优势💖The Begin💖点点关注,收藏不迷路💖 在Kubernetes集群中,RBAC(基于角色的访问控制)是保障系统安全的关键。它通过角色和绑定管理不同实体对资源的访问权限,具有显著优势: 1、什么是RBAC? RBAC是Kube…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...