Skip to content

platformio 对git和github的支持特别好,我们可以很方便的使用github的一些工具

Github Actions 介绍

官方介绍 GitHub Actions 是一个持续集成和持续交付 (CI/CD) 平台,允许您自动化构建、测试和部署管道。您可以创建工作流程来构建和测试对存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。

简单的说: 你可以利用github action脚本实现一些自动化的操作 - 检查是否能编译 - 生成bin文件上传到release - 检查代码是否符合指定风格 - 等等

Github Actions 使用

Github Action顾名思义肯定是基于github的,所以一切操作都是在github仓库上进行的。

文件目录

在git工程根目录下创建在.github文件夹 在.github下创建workflows文件夹 workflows文件夹中创建工作流文件

对于轻量级应用目录如下 因为我们workflow并不复杂,这里将action文件夹省略了

工程根目录
├── .github/
│           └──workflows/
│                       └── your-workflow.yml
│
├── README.md
└── LICENSE

.yml就是我们要执行的任务配置文件

yml配置文件编写

示例

检查platform工程是否能过编译

# 编译PlatformIO项目的github action配置
name: Build PlatformIO project

on: [push]  # 触发条件,这里是代码被推送到仓库时

jobs:
  build:
    runs-on: ubuntu-latest  # 运行环境,这里是最新的Ubuntu系统

    steps:
    - name: Checkout code  # 检出代码
      uses: actions/checkout@v2

    - name: Setup PlatformIO  # 设置PlatformIO
      uses: n-vr/setup-platformio-action@v1

    - name: Build PlatformIO project  # 构建PlatformIO项目
      run: pio run

自动生成bin文件,并发布release

该脚本可以在推送含有“vXXX”标签时自动生成并发布bin文件

使用前需要将 【附件】merge_bins.py 文件放在工程根目录下

例如我在本地创建了一个“v1.2.3”的标签 git tag -a v1.2.3 -m "new version"

推送标签 git push --tags

之后即可在github查看状态


脚本文件

# 编译PlatformIO项目并生成bin固件推送到Release的github action
# 使用前需要修改下面的文件路径,以及工程名,以及bin文件名
name: Build bin release
on: [push]  # 触发条件,这里是代码被推送到仓库时

jobs:
  build-and-release:
    runs-on: ubuntu-latest  # 运行环境,这里是最新的Ubuntu系统
    permissions:
      contents: write
    steps:
    - name: Checkout code  # 检出代码
      uses: actions/checkout@v2

    - name: Setup PlatformIO  # 设置PlatformIO
      uses: n-vr/setup-platformio-action@v1

    - name: Build   # 构建项目
      run: |
        pio run
    - name: Create Release and Upload Bin  # 创建Release并上传.bin文件
      uses: softprops/action-gh-release@v1
      # 如果是标签推送,则执行Release操作
      if: startsWith(github.ref, 'refs/tags/') 
      with:

        #修改下面的文件路径↓↓↓↓↓↓

        files: .pio/build/"工程名"/bin文件.bin  # 上传的文件路径

        #修改上面的文件路径↑↑↑↑↑↑

      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  # 使用GitHub提供的token

注意action是在一个虚拟机中创建一个platformio环境进行的编译,有些库和软件包如果没有指定版本可能会导致一些意想不到的的bug