github action使用技巧

  • 使用常规命令和环境赋值

    - name: Release set path
      run: |
        touch release.txt
        cd openwrt/bin/targets/*/*
        rm -rf ./packages
        echo "RELEASE_PATH=$PWD" >> $GITHUB_ENV
        echo "FILE_DATE=_$(date +"%Y%m%d%H%M")" >> $GITHUB_ENV
  • 目录打包,常量使用

    - name: pack bin dir
      run: |
        tar -zcvf bin_dir.tar.gz ./bin/
        mv bin_dir.tar.gz ${{ env.RELEASE_PATH }}/
  • 文件上传(目录或者文件),outputs状态变量

    - name: Cloudupload
      id: cloudupload
      run: |
        curl -fsSL git.io/file-transfer | sh
        ./transfer wss --no-progress ${{ env.RELEASE_PATH }}/bin_dir.tar.gz 2>&1 | tee release.txt
        echo "url=$(cat cloudupload.log | grep https | cut -f3 -d' ')" >> $GITHUB_OUTPUT
  • outputs变量数据

    - name: Release set path
      run: |
        echo "${{ steps.cloudupload.outputs.url }}"
        echo "[cloudupload](${{ steps.cloudupload.outputs.url }})" >> release.txt
  • 保存到Artifacts

    - name: Artifacts File Save
      uses: actions/upload-artifact@main
      with:
        name: OpenWrt_firmware${{ env.DEVICE_NAME }}${{ env.FILE_DATE }}
        path: ${{ env.FIRMWARE }}

      # 多个文件
      - name: Upload App To Artifact
        uses: actions/upload-artifact@v3
        if: ${{ env.commit }}
        with:
          name: ${{ matrix.userName }}-${{ matrix.repoName }}
          path: |
            TVBoxOSC/apk/*
  • 发布Release,使用release.txt

      - name: Release and Upload Assets
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: release_${{ env.tag }}
          body_path: release.txt
          files: TVBoxOSC/apk/*

      #多个
      - name: Upload release APKs
        uses: actions/upload-artifact@v3
        with:
          name: release-apk
          path: |
            element-android/vector-app/build/outputs/apk/*/nightly/*.apk

版本1

版本2,支持shell.nix

# 使用 https://github.com/nix-community/nix-environments/blob/master/envs/openwrt/shell.nix
  • Create .github/workflows/build.yml

name: "NixShellTest"
on:
  pull_request:
  push:
  workflow_dispatch:
jobs:
  tests:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: cachix/[email protected]
      env:
        NIXPKGS_ALLOW_INSECURE: 1
      with:
        nix_path: nixpkgs=channel:nixos-unstable
    - uses: dx-oss/nix-shell-action@v11
      env:
        NIXPKGS_ALLOW_INSECURE: 1
      with:
        interpreter: bash
        file: shell.nix
        script: |
          which gcc
7z a -tzip -r -mx=9 dl.zip ./dl
busybox httpd -f -p 0.0.0.0:7171