From 1950e469d1c8e042dcfd3d653703c3a5b953d13e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=AE=E7=94=9F=E8=8B=A5=E6=A2=A6?= <1070753498@qq.com> Date: Sun, 26 Nov 2023 19:54:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20action;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/clean_cache.yml | 40 ++++++++++++++ .github/workflows/cmake.yml | 57 ++++++++++---------- .github/workflows/delete_workflow.yml | 65 +++++++++++++++++++++++ .github/workflows/qmake.yml | 39 +++++++++----- .github/workflows/readme.yml | 4 +- .github/workflows/toolchain.yml | 75 +++++++++++++++++++++++++++ CMakeLists.txt | 4 +- 7 files changed, 241 insertions(+), 43 deletions(-) create mode 100644 .github/workflows/clean_cache.yml create mode 100644 .github/workflows/delete_workflow.yml create mode 100644 .github/workflows/toolchain.yml diff --git a/.github/workflows/clean_cache.yml b/.github/workflows/clean_cache.yml new file mode 100644 index 0000000..2db7538 --- /dev/null +++ b/.github/workflows/clean_cache.yml @@ -0,0 +1,40 @@ +name: Cleanup caches by a branch +on: + # 每周一 0 点触发 + schedule: + - cron: '0 0 * * 1' + workflow_dispatch: + +jobs: + cleanup: + runs-on: ubuntu-latest + permissions: + # `actions:write` permission is required to delete caches + # See also: https://docs.github.com/en/rest/actions/cache?apiVersion=2022-11-28#delete-a-github-actions-cache-for-a-repository-using-a-cache-id + actions: write + contents: read + steps: + - name: Check out code + uses: actions/checkout@v4 + + - name: Cleanup + run: | + gh extension install actions/gh-actions-cache + + REPO=${{ github.repository }} + BRANCH=${{ github.ref }} + + echo "Fetching list of cache key" + cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 ) + + ## Setting this to not fail the workflow while deleting cache keys. + set +e + echo "Deleting caches..." + for cacheKey in $cacheKeysForPR + do + gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm + done + echo "Done" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + \ No newline at end of file diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d649fad..b5712f8 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -4,6 +4,11 @@ on: # push代码时触发workflow push: paths-ignore: # 下列文件的变更不触发部署,可以自行添加 + - '.github/workflows/clean_cache.yml' + - '.github/workflows/delete_workflow.yml' + - '.github/workflows/qmake.yml' + - '.github/workflows/readme.yml' + - '.github/workflows/toolchain.yml' - 'doc/**' - '.clang-*' - '.gitignore' @@ -11,6 +16,11 @@ on: - 'README*' pull_request: paths-ignore: # 下列文件的变更不触发部署,可以自行添加 + - '.github/workflows/clean_cache.yml' + - '.github/workflows/delete_workflow.yml' + - '.github/workflows/qmake.yml' + - '.github/workflows/readme.yml' + - '.github/workflows/toolchain.yml' - 'doc/**' - '.clang-*' - '.gitignore' @@ -29,23 +39,26 @@ jobs: - macos-latest - ubuntu-latest qt_ver: - - 6.5.2 + - 6.6.1 build_type: - "RelWithDebInfo" generators: - "Ninja" steps: - - name: cache vcpkg - uses: actions/cache@v3 - with: - path: | - C:\vcpkg\installed - /usr/local/share/vcpkg/installed - key: ${{ runner.os }}-vcpkg-installed-${{ matrix.os }}-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-vcpkg-installed-${{ matrix.os }}- - ${{ runner.os }}-vcpkg-installed- + - name: Restore windows vcpkg + if: startsWith(matrix.os, 'windows') + uses: actions/cache/restore@v3 + with: + path: C:\vcpkg\installed + key: ${{ runner.os }}-vcpkg-installed-${{ matrix.os }} + - name: Restore macos or ubuntu vcpkg + if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu') + uses: actions/cache/restore@v3 + with: + path: /usr/local/share/vcpkg/installed + key: ${{ runner.os }}-vcpkg-installed-${{ matrix.os }} + - name: Install dependencies on windows if: startsWith(matrix.os, 'windows') shell: bash @@ -79,10 +92,10 @@ jobs: with: version: ${{ matrix.qt_ver }} install-deps: 'true' - modules: 'qt5compat addons.qtserialport addons.qtnetworkauth addons.qtmultimedia addons.qtimageformats' + modules: 'qt5compat qtserialport qtnetworkauth qtmultimedia qtimageformats' cache: 'true' - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 1 @@ -180,16 +193,16 @@ jobs: rm -f ./bin-64/${{ matrix.build_type }}/*.so mv *.AppImage ./bin-64/${{ matrix.build_type }} - - name: Show Upload files + - name: 7z package shell: bash run: | - ls -l ./bin-64/${{ matrix.build_type }} + ls -al ./bin-64/${{ matrix.build_type }} + 7z a -t7z -r -mx=9 -mmt Qt-App-${{ matrix.os }}-${{ matrix.build_type }}.7z ./bin-64/${{ matrix.build_type }} - name: Upload packages uses: actions/upload-artifact@v3 with: name: ${{ matrix.os }}-${{ matrix.build_type }} - path: | - ./bin-64/${{ matrix.build_type }} + path: Qt-App-${{ matrix.os }}-${{ matrix.build_type }}.7z release: name: Release @@ -201,14 +214,6 @@ jobs: steps: - name: Download packages uses: actions/download-artifact@v3 - - name: Zip packages - shell: bash - run: | - ls -l - zip -9 -r Qt-App-Windows.zip windows-latest-RelWithDebInfo - zip -9 -r Qt-App-MacOS.zip macos-latest-RelWithDebInfo - zip -9 -r Qt-App-Ubuntu.zip ubuntu-latest-RelWithDebInfo - ls -l - name: Create Release uses: softprops/action-gh-release@v1 @@ -217,4 +222,4 @@ jobs: prerelease: false generate_release_notes: true files: | - *.zip + *.7z diff --git a/.github/workflows/delete_workflow.yml b/.github/workflows/delete_workflow.yml new file mode 100644 index 0000000..ae96aae --- /dev/null +++ b/.github/workflows/delete_workflow.yml @@ -0,0 +1,65 @@ +name: Delete old workflow runs +on: + workflow_dispatch: + inputs: + days: + description: 'Days-worth of runs to keep for each workflow' + required: true + default: '30' + minimum_runs: + description: 'Minimum runs to keep for each workflow' + required: true + default: '6' + delete_workflow_pattern: + description: 'Name or filename of the workflow (if not set, all workflows are targeted)' + required: false + delete_workflow_by_state_pattern: + description: 'Filter workflows by state: active, deleted, disabled_fork, disabled_inactivity, disabled_manually' + required: true + default: "ALL" + type: choice + options: + - "ALL" + - active + - deleted + - disabled_inactivity + - disabled_manually + delete_run_by_conclusion_pattern: + description: 'Remove runs based on conclusion: action_required, cancelled, failure, skipped, success' + required: true + default: "failure" + type: choice + options: + - "ALL" + - "Unsuccessful: action_required,cancelled,failure,skipped" + - action_required + - cancelled + - failure + - skipped + - success + dry_run: + description: 'Logs simulated changes, no deletions are performed' + required: false + +jobs: + del_runs: + runs-on: ubuntu-latest + permissions: + actions: write + steps: + - name: Delete workflow runs + uses: Mattraks/delete-workflow-runs@v2 + with: + token: ${{ github.token }} + repository: ${{ github.repository }} + retain_days: ${{ github.event.inputs.days }} + keep_minimum_runs: ${{ github.event.inputs.minimum_runs }} + delete_workflow_pattern: ${{ github.event.inputs.delete_workflow_pattern }} + delete_workflow_by_state_pattern: ${{ github.event.inputs.delete_workflow_by_state_pattern }} + delete_run_by_conclusion_pattern: >- + ${{ + startsWith(github.event.inputs.delete_run_by_conclusion_pattern, 'Unsuccessful:') + && 'action_required,cancelled,failure,skipped' + || github.event.inputs.delete_run_by_conclusion_pattern + }} + dry_run: ${{ github.event.inputs.dry_run }} diff --git a/.github/workflows/qmake.yml b/.github/workflows/qmake.yml index 2ea2f83..d279dbf 100644 --- a/.github/workflows/qmake.yml +++ b/.github/workflows/qmake.yml @@ -4,6 +4,11 @@ on: # push代码时触发workflow push: paths-ignore: # 下列文件的变更不触发部署,可以自行添加 + - '.github/workflows/clean_cache.yml' + - '.github/workflows/delete_workflow.yml' + - '.github/workflows/cmake.yml' + - '.github/workflows/readme.yml' + - '.github/workflows/toolchain.yml' - 'doc/**' - '.clang-*' - '.gitignore' @@ -11,6 +16,11 @@ on: - 'README*' pull_request: paths-ignore: # 下列文件的变更不触发部署,可以自行添加 + - '.github/workflows/clean_cache.yml' + - '.github/workflows/delete_workflow.yml' + - '.github/workflows/cmake.yml' + - '.github/workflows/readme.yml' + - '.github/workflows/toolchain.yml' - 'doc/**' - '.clang-*' - '.gitignore' @@ -29,19 +39,22 @@ jobs: - macos-latest - ubuntu-latest qt_ver: - - 6.5.2 + - 6.6.1 steps: - - name: cache vcpkg - uses: actions/cache@v3 - with: - path: | - C:\vcpkg\installed - /usr/local/share/vcpkg/installed - key: ${{ runner.os }}-vcpkg-installed-${{ matrix.os }}-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-vcpkg-installed-${{ matrix.os }}- - ${{ runner.os }}-vcpkg-installed- + - name: Restore windows vcpkg + if: startsWith(matrix.os, 'windows') + uses: actions/cache/restore@v3 + with: + path: C:\vcpkg\installed + key: ${{ runner.os }}-vcpkg-installed-${{ matrix.os }} + - name: Restore macos or ubuntu vcpkg + if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu') + uses: actions/cache/restore@v3 + with: + path: /usr/local/share/vcpkg/installed + key: ${{ runner.os }}-vcpkg-installed-${{ matrix.os }} + - name: Install dependencies on windows if: startsWith(matrix.os, 'windows') shell: bash @@ -75,10 +88,10 @@ jobs: with: version: ${{ matrix.qt_ver }} install-deps: 'true' - modules: 'qt5compat addons.qtserialport addons.qtnetworkauth addons.qtmultimedia addons.qtimageformats' + modules: 'qt5compat qtserialport qtnetworkauth qtmultimedia qtimageformats' cache: 'true' - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 1 diff --git a/.github/workflows/readme.yml b/.github/workflows/readme.yml index 0cf4fb1..aff09d7 100644 --- a/.github/workflows/readme.yml +++ b/.github/workflows/readme.yml @@ -12,9 +12,9 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: 12.x # ISO Langusge Codes: https://cloud.google.com/translate/docs/languages diff --git a/.github/workflows/toolchain.yml b/.github/workflows/toolchain.yml new file mode 100644 index 0000000..0913275 --- /dev/null +++ b/.github/workflows/toolchain.yml @@ -0,0 +1,75 @@ +name: Build toolchain + +on: + # 清理 Cache 后触发 + workflow_run: + workflows: [Cleanup caches by a branch] + types: completed + # 手动触发 + workflow_dispatch: + +jobs: + build: + name: Build + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: + - windows-latest + - windows-2019 + - macos-latest + - ubuntu-latest + qt_ver: + - 6.6.1 + + steps: + - name: Install Qt + uses: jurplel/install-qt-action@v3 + with: + version: ${{ matrix.qt_ver }} + install-deps: 'true' + modules: 'qt5compat qtserialport qtnetworkauth qtmultimedia qtimageformats' + cache: 'true' + + - name: Install dependencies on windows + if: startsWith(matrix.os, 'windows') + shell: bash + run: | + choco install ninja + ninja --version + cmake --version + vcpkg install breakpad --triplet x64-windows + - name: Install dependencies on macos + if: startsWith(matrix.os, 'macos') + shell: bash + run: | + brew install ninja nasm pkg-config + ninja --version + cmake --version + clang --version + vcpkg install breakpad --triplet x64-osx + - name: Install dependencies on ubuntu + if: startsWith(matrix.os, 'ubuntu') + shell: bash + run: | + sudo apt-get update + sudo apt-get install ninja-build nasm build-essential libgl1-mesa-dev + ninja --version + cmake --version + gcc --version + vcpkg install breakpad --triplet x64-linux + + - name: cache windows vcpkg + if: startsWith(matrix.os, 'windows') + uses: actions/cache/save@v3 + with: + path: C:\vcpkg\installed + key: ${{ runner.os }}-vcpkg-installed-${{ matrix.os }} + - name: cache macos or ubuntu vcpkg + if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu') + uses: actions/cache/save@v3 + with: + path: /usr/local/share/vcpkg/installed + key: ${{ runner.os }}-vcpkg-installed-${{ matrix.os }} + diff --git a/CMakeLists.txt b/CMakeLists.txt index 44463db..efa6e3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,11 +18,11 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(utils) if(CMAKE_HOST_WIN32) - list(APPEND CMAKE_PREFIX_PATH "C:\\Qt\\6.5.2\\msvc2019_64") + list(APPEND CMAKE_PREFIX_PATH "C:\\Qt\\6.6.1\\msvc2019_64") elseif(CMAKE_HOST_APPLE) elseif(CMAKE_HOST_UNIX) - list(APPEND CMAKE_PREFIX_PATH "/opt/Qt/6.5.2/gcc_64") + list(APPEND CMAKE_PREFIX_PATH "/opt/Qt/6.6.1/gcc_64") endif() project(