使用GitHub Actions提升开发者体验
背景
身处一个致力于构建全球顶级应用生态的组织,作为其中的一名SDK测试人员,肩负着验证N多示例Demo的重任。这些Demo同时发布在 GitHub/Gitee上,是开发者了解产品的门户,其功能是否可用在很大程度决定了开发者对产品的第一印象。
业务痛点
通过分析历史VOD(Voice Of Developer)问题发现:
- 有不少的Demo用户下载后居然编译报错;
- 提供的指导文档README.md里面,存在URL失效;
- GitHub和Gitee的代码不同步,有很多代码问题,在GitHub上已修复,Gitee上还仍然存在;反之亦然。
前期这部分的测试看护,纯由人工完成,人工下载代码、人工验证,难免疏漏。在2022年还用这种人拉肩扛的方式,是可忍孰不可忍,故有此文。
示例
GitHub Action
GitHub Actions 是 GitHub 的持续集成服务,于2018年10月推出。
基本概念
- workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
- job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
- step(步骤):每个 job 由多个 step 构成,一步步完成。
- action (动作):每个 step 可以依次执行一个或多个命令(action)。
解决方案
利用GitHub Action,构建Demo的持续集成能力,解决上述3个痛点问题。
添加 Android CI,在 push 和 pull_request 到 master 分支时,触发编译检查+URL有效性检查
添加 build job
name: Android CI
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [ master ]
pull_request:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: set up JDK 1.8
uses: actions/setup-java@v2
with:
java-version: '8'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew app:assemble
- name: show apk file
run: cd ./app/build/outputs/apk/release; ls -l
添加 markdown-link-check job
jobs:
markdown-link-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: gaurav-nelson/github-action-markdown-link-check@v1
with:
use-verbose-mode: 'yes'
添加 mirror-to-gitee workflow,在 push 和 pull_request 到 master 分支时,触发代码同步到 Gitee
name: mirror-to-gitee
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
pull_request:
branches: [master]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
run:
name: Run
runs-on: ubuntu-latest
steps:
- name: Checkout source codes
uses: actions/checkout@v2
- name: Mirror the Github organization repos to Gitee.
uses: Yikun/hub-mirror-action@v1.2
with:
src: github/xuruizhi
dst: gitee/xuruizhi
dst_key: $
dst_token: $
white_list: github-action-test