From 40b170cc1bd57274387e4c2891561089f23f8e2b Mon Sep 17 00:00:00 2001 From: Jaromil Date: Tue, 27 Dec 2022 11:17:40 +0100 Subject: [PATCH] feat: github workflow for ci build also features: - semantic release - cpp linter - binary release - cmake+ninja build --- .github/workflows/main.yml | 183 +++++++++++++++++++++++++++++++++++++ .releaserc | 8 ++ 2 files changed, 191 insertions(+) create mode 100644 .github/workflows/main.yml create mode 100644 .releaserc diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..ed4a9fbd --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,183 @@ +name: frei0r + +on: + push: + paths-ignore: + - 'doc/**' + - '*.md' + branches: + - master + pull_request: + paths-ignore: + - 'doc/**' + - '*.md' + branches: + - master + +concurrency: + group: ${{ github.workflow }}-${{ github.ref_name }} + cancel-in-progress: true + +jobs: + + # reuse: + # name: 🚨 REUSE Compliance + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v3 + # - uses: fsfe/reuse-action@v1 + + c-lint: + name: 🚨 C lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: reviewdog/action-cpplint@master + env: + REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + reporter: github-pr-check + targets: --recursive src + level: warning + flags: --linelength=120 # Optional + filter: "-readability/braces\ + ,-readability/casting\ + ,-readability/todo\ + ,-whitespace/comma\ + ,-whitespace/braces\ + ,-whitespace/comments\ + ,-whitespace/indent\ + ,-whitespace/newline\ + ,-whitespace/operators\ + ,-whitespace/parens\ + ,-whitespace/tab\ + ,-whitespace/end_of_line\ + ,-whitespace/line_length\ + ,-whitespace/blank_line\ + ,-whitespace/semicolon\ + ,-build/include_subdir\ + ,-build/include_order\ + " # Optional + # - name: Fail fast?! + # if: steps.linter.outputs.checks-failed > 0 + # run: | + # echo "😤 Some files failed the C linting checks!" + + + semantic-release: + name: 🤖 Semantic release + runs-on: ubuntu-latest +# if: ${{ github.ref_name == 'master' && github.event_name == 'push' }} + outputs: + release: ${{ steps.tag_release.outputs.release }} + version: ${{ steps.tag_release.outputs.version }} + steps: + - uses: actions/checkout@v3 + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 16.x + - name: Install NPX + run: npm i npx + - name: Tag release + id: tag_release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + if [[ `git tag --points-at HEAD` == "" ]]; then + echo "release=False" >> $GITHUB_OUTPUT + else + echo "release=True" >> $GITHUB_OUTPUT + fi + npx semantic-release | tee semantic-release.log + awk '/Published release/ { printf("version=v%s\n",$8) }' semantic-release.log >> $GITHUB_OUTPUT + + cmake-build: + name: 🏗️ cmake build + needs: [c-lint, semantic-release] + if: "!contains(github.event.pull_request.labels.*.name, 'SKIP_MESON')" + strategy: + matrix: + compiler: [clang-14] + fail-fast: false + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Upload documentation artifacts + uses: actions/upload-artifact@v3 + with: + name: release-documentation + path: ./* + - name: install compiler and dependencies + run: | + sudo apt-get update -qy + sudo apt-get install --no-install-recommends -y ${{ matrix.compiler }} cmake ninja-build +# libfreetype-dev libopencv-dev libcairo2-dev libgavl-dev + - name: ${{ matrix.compiler }} initialize cmake build + run: | + mkdir -p build && cd build + cmake -G "Ninja" ../ + - name: ${{ matrix.compiler }} make build + run: | + cd build && ninja + - name: Upload artifacts from clang build + uses: actions/upload-artifact@v3 + with: + name: release-filters-linux-amd64 + path: build/src/filter/**/*.so + - name: Upload artifacts from clang build + uses: actions/upload-artifact@v3 + with: + name: release-mixers-linux-amd64 + path: build/src/mixer*/**/*.so + - name: Upload artifacts from clang build + uses: actions/upload-artifact@v3 + with: + name: release-generators-linux-amd64 + path: build/src/generator/**/*.so + + draft-binary-release: + name: 📦 Pack release + needs: [cmake-build, semantic-release] + runs-on: ubuntu-latest + steps: + - name: download binary artifacts + uses: actions/download-artifact@v3 + with: + path: | + frei0r-bin + # - name: show directory structure + # run: tree -dL 3 + - name: create compressed archives + run: | + cd frei0r-bin + dst=frei0r-mixers_${{ needs.semantic-release.outputs.version }}_linux-amd64 + mkdir $dst && find release-mixers-linux-amd64 -type f -name '*.so' -exec cp {} $dst \; + d=release-documentation && cp $d/README.md $d/COPYING $d/ChangeLog $d/AUTHORS $dst + echo "${{ needs.semantic-release.outputs.version }}" > $dst/VERSION + tar cfz $dst.tar.gz $dst + dst=frei0r-filters_${{ needs.semantic-release.outputs.version }}_linux-amd64 + mkdir $dst && find release-filters-linux-amd64 -type f -name '*.so' -exec cp {} $dst \; + d=release-documentation && cp $d/README.md $d/COPYING $d/ChangeLog $d/AUTHORS $dst + echo "${{ needs.semantic-release.outputs.version }}" > $dst/VERSION + tar cfz $dst.tar.gz $dst + dst=frei0r-generators_${{ needs.semantic-release.outputs.version }}_linux-amd64 + mkdir $dst && find release-generators-linux-amd64 -type f -name '*.so' -exec cp {} $dst \; + d=release-documentation && cp $d/README.md $d/COPYING $d/ChangeLog $d/AUTHORS $dst + echo "${{ needs.semantic-release.outputs.version }}" > $dst/VERSION + tar cfz $dst.tar.gz $dst + sha256sum *.tar.gz > SHA256SUMS.txt + - name: relase all archives + uses: softprops/action-gh-release@v1 + with: + files: | + frei0r-bin/*.tar.gz + frei0r-bin/SHA256SUMS.txt + tag_name: ${{ needs.semantic-release.outputs.version }} + draft: false + prerelease: false + fail_on_unmatched_files: true + generate_release_notes: true + + diff --git a/.releaserc b/.releaserc new file mode 100644 index 00000000..2a0d7ed3 --- /dev/null +++ b/.releaserc @@ -0,0 +1,8 @@ +{ + "repositoryUrl": "git@github.com:dyne/frei0r.git", + "dryRun": false, + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator" + ] +}