From fff4daea8f6a8b0e8b13f6307378cc948febd47d Mon Sep 17 00:00:00 2001 From: Alex Diaz <alex@akdev.xyz> Date: Tue, 19 Oct 2021 19:50:15 -0400 Subject: [PATCH 1/3] ci/cd: add github workflows All the builds are done in fedora containers at the moment. 1. build.yml - triggers on every push and PR, it just builds the project 2. build-cmake.yml - triggers on every push and PR, it builds the project with cmake 3. release.yml - triggers on v* tags on master, it creates a new github release, builds a fedora RPM and also uploads the rpm and src rpm to the release page for distribution minor bug in the makefile was fixed, it was preventing from using multiple threads for compilation which slowed down the build --- .github/workflows/build-cmake.yml | 21 +++++++++++ .github/workflows/build.yml | 20 ++++++++++ .github/workflows/release.yml | 62 +++++++++++++++++++++++++++++++ makefile | 2 +- 4 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/build-cmake.yml create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/build-cmake.yml b/.github/workflows/build-cmake.yml new file mode 100644 index 0000000..ebfd151 --- /dev/null +++ b/.github/workflows/build-cmake.yml @@ -0,0 +1,21 @@ +on: + push: + branches: + - master + pull_request: + branches: + - master +jobs: + fedora-cmake-build: + runs-on: ubuntu-latest + container: fedora:34 + steps: + - uses: actions/checkout@v2 + - name: install tools and dependencies + run: | + dnf install -y cmake rpm-build findutils clang-tools-extra 'dnf-command(builddep)' + dnf builddep -y mouse_m908.spec + - name: build mouse_m908 with cmake + run: | + cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -Bbuild + cmake --build build diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..b33a516 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,20 @@ +on: + push: + branches: + - master + pull_request: + branches: + - master +jobs: + fedora-rpm-build: + runs-on: ubuntu-latest + container: fedora:34 + steps: + - uses: actions/checkout@v2 + - name: install tools and dependencies + run: | + dnf install -y rpm-build findutils clang-tools-extra 'dnf-command(builddep)' + dnf builddep -y mouse_m908.spec + - name: build mouse_m908 rpm package + run: | + make -j4 rpm diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..0280360 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,62 @@ +on: + push: + tags: + - v* + +jobs: + fedora-release-rpm: + runs-on: ubuntu-latest + container: fedora:34 + steps: + - name: get version from tag + run: | + echo "RELEASE_VER=${GITHUB_REF#*/*/v}" >> ${GITHUB_ENV} + - uses: actions/checkout@v2 + - name: install tools and dependencies + run: | + dnf install -y rpm-build findutils clang-tools-extra 'dnf-command(builddep)' + dnf builddep -y mouse_m908.spec + - name: build mouse_m908 rpm package + run: | + make -j4 rpm + make -j4 src-rpm + - name: upload rpm package artifact + uses: actions/upload-artifact@v2 + with: + name: mouse_m908-${{ github.run_id }}-1.x86_64.rpm + path: mouse_m908-${{ env.RELEASE_VER }}-1.x86_64.rpm + - name: upload src rpm package artifact + uses: actions/upload-artifact@v2 + with: + name: mouse_m908-${{ github.run_id }}.src.rpm + path: mouse_m908-${{ env.RELEASE_VER }}-1.src.rpm + - name: create release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ${{ github.ref }} + draft: false + prerelease: false + - name: upload rpm package to release page + id: upload-release-rpm + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./mouse_m908-${{ env.RELEASE_VER }}-1.x86_64.rpm + asset_name: mouse_m908-${{ env.RELEASE_VER }}-1.x86_64.rpm + asset_content_type: application/octet-stream + - name: upload src rpm package to release page + id: upload-release-srpm + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./mouse_m908-${{ env.RELEASE_VER }}-1.src.rpm + asset_name: mouse_m908-${{ env.RELEASE_VER }}-1.src.rpm + asset_content_type: application/octet-stream diff --git a/makefile b/makefile index 6d66e14..1b8bc94 100644 --- a/makefile +++ b/makefile @@ -52,7 +52,7 @@ upgrade: install # this builds a .rpm for Fedora/RHEL systems rpm: - rpmbuild --buildroot $(PWD)/rpmbuild/BUILDROOT --define "_topdir $(PWD)/rpmbuild" -bb mouse_m908.spec + +rpmbuild --buildroot $(PWD)/rpmbuild/BUILDROOT --define "_topdir $(PWD)/rpmbuild" -bb mouse_m908.spec # this builds .src.rpm for Fedora/RHEL systems src-rpm: From bd536b8ae66bac5f62c19648d6cd041b3c9bb8fe Mon Sep 17 00:00:00 2001 From: Alex Diaz <alex@akdev.xyz> Date: Tue, 19 Oct 2021 22:48:35 -0400 Subject: [PATCH 2/3] ci/cd: enable centos 8 build --- .github/workflows/build.yml | 13 +++++++++++++ mouse_m908.spec | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b33a516..9ece61e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,3 +18,16 @@ jobs: - name: build mouse_m908 rpm package run: | make -j4 rpm + centos-rpm-build: + runs-on: ubuntu-latest + container: centos:8 + steps: + - uses: actions/checkout@v2 + - name: install tools and dependencies + run: | + dnf install -y rpm-build findutils clang-tools-extra 'dnf-command(builddep)' 'dnf-command(config-manager)' + dnf config-manager --set-enabled powertools + dnf builddep -y mouse_m908.spec + - name: build mouse_m908 rpm package + run: | + make -j4 rpm diff --git a/mouse_m908.spec b/mouse_m908.spec index 85f4506..80932f1 100644 --- a/mouse_m908.spec +++ b/mouse_m908.spec @@ -7,12 +7,12 @@ Name: mouse_m908 Version: 3.2 -Release: 1 +Release: 1%{?dist} Summary: Control Redragon gaming mice from Linux, BSD and Haiku License: GPL v3 URL: https://github.com/dokutan/mouse_m908 -BuildRequires: gcc-c++ libusb libusb-devel +BuildRequires: gcc-c++ libusb libusb-devel make Requires: libusb ExclusiveArch: x86_64 From f5e85f32348bbf4ecbdf00ab4a6f4cf3b7df6b1d Mon Sep 17 00:00:00 2001 From: Alex Diaz <alex@akdev.xyz> Date: Tue, 19 Oct 2021 23:29:33 -0400 Subject: [PATCH 3/3] ci/cd: enable centos 8 release --- .github/workflows/release.yml | 153 +++++++++++++++++++++++++++------- 1 file changed, 123 insertions(+), 30 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0280360..6f4cdff 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,32 +4,10 @@ on: - v* jobs: - fedora-release-rpm: + create-gh-release: runs-on: ubuntu-latest - container: fedora:34 + container: fedora:latest steps: - - name: get version from tag - run: | - echo "RELEASE_VER=${GITHUB_REF#*/*/v}" >> ${GITHUB_ENV} - - uses: actions/checkout@v2 - - name: install tools and dependencies - run: | - dnf install -y rpm-build findutils clang-tools-extra 'dnf-command(builddep)' - dnf builddep -y mouse_m908.spec - - name: build mouse_m908 rpm package - run: | - make -j4 rpm - make -j4 src-rpm - - name: upload rpm package artifact - uses: actions/upload-artifact@v2 - with: - name: mouse_m908-${{ github.run_id }}-1.x86_64.rpm - path: mouse_m908-${{ env.RELEASE_VER }}-1.x86_64.rpm - - name: upload src rpm package artifact - uses: actions/upload-artifact@v2 - with: - name: mouse_m908-${{ github.run_id }}.src.rpm - path: mouse_m908-${{ env.RELEASE_VER }}-1.src.rpm - name: create release id: create_release uses: actions/create-release@v1 @@ -40,15 +18,66 @@ jobs: release_name: ${{ github.ref }} draft: false prerelease: false + - name: put upload_url in artifact + run: | + echo '${{ steps.create_release.outputs.upload_url }}' > release-upload-url + - name: upload artifact + uses: actions/upload-artifact@v2 + with: + name: release-upload-url + path: release-upload-url + + fedora-release-rpm: + runs-on: ubuntu-latest + container: fedora:34 + steps: + - uses: actions/checkout@v2 + - name: get version details + run: | + echo "RELEASE_VER=${GITHUB_REF#*/*/v}" >> ${GITHUB_ENV} + echo "DIST_TAG=$(rpm --eval '%dist')" >> ${GITHUB_ENV} + echo "RPM_RELEASE=$(awk '/Release:/{$0 = $2; FS="%"; $0=$0; print $1}' mouse_m908.spec)" >> ${GITHUB_ENV} + - name: set output variables + run: | + echo "RPM_NAME=mouse_m908-${RELEASE_VER}-${RPM_RELEASE}${DIST_TAG}.x86_64.rpm" >> ${GITHUB_ENV} + echo "SRPM_NAME=mouse_m908-${RELEASE_VER}-${RPM_RELEASE}${DIST_TAG}.src.rpm" >> ${GITHUB_ENV} + - name: install tools and dependencies + run: | + dnf install -y rpm-build findutils clang-tools-extra 'dnf-command(builddep)' + dnf builddep -y mouse_m908.spec + - name: build mouse_m908 rpm package + run: | + make -j4 rpm + make -j4 src-rpm + + - name: upload rpm package artifact + uses: actions/upload-artifact@v2 + with: + name: ${{ env.RPM_NAME }} + path: ${{ env.RPM_NAME }} + - name: upload src rpm package artifact + uses: actions/upload-artifact@v2 + with: + name: ${{ env.SRPM_NAME }} + path: ${{ env.SRPM_NAME }} + + - name: download release-upload-url artifact + uses: actions/download-artifact@v2 + with: + name: release-upload-url + path: release-upload-url + - name: set upload url environment var + run: | + echo "UPLOAD_URL=$(cat release-upload-url/release-upload-url)" >> ${GITHUB_ENV} - name: upload rpm package to release page id: upload-release-rpm uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./mouse_m908-${{ env.RELEASE_VER }}-1.x86_64.rpm - asset_name: mouse_m908-${{ env.RELEASE_VER }}-1.x86_64.rpm + upload_url: ${{ env.UPLOAD_URL }} + asset_path: ./${{ env.RPM_NAME }} + asset_name: ${{ env.RPM_NAME }} asset_content_type: application/octet-stream - name: upload src rpm package to release page id: upload-release-srpm @@ -56,7 +85,71 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./mouse_m908-${{ env.RELEASE_VER }}-1.src.rpm - asset_name: mouse_m908-${{ env.RELEASE_VER }}-1.src.rpm + upload_url: ${{ env.UPLOAD_URL }} + asset_path: ./${{ env.SRPM_NAME }} + asset_name: ${{ env.SRPM_NAME }} + asset_content_type: application/octet-stream + + centos-release-rpm: + runs-on: ubuntu-latest + container: centos:8 + steps: + - uses: actions/checkout@v2 + - name: get version details + run: | + echo "RELEASE_VER=${GITHUB_REF#*/*/v}" >> ${GITHUB_ENV} + echo "DIST_TAG=$(rpm --eval '%dist')" >> ${GITHUB_ENV} + echo "RPM_RELEASE=$(awk '/Release:/{$0 = $2; FS="%"; $0=$0; print $1}' mouse_m908.spec)" >> ${GITHUB_ENV} + - name: set output variables + run: | + echo "RPM_NAME=mouse_m908-${RELEASE_VER}-${RPM_RELEASE}${DIST_TAG}.x86_64.rpm" >> ${GITHUB_ENV} + echo "SRPM_NAME=mouse_m908-${RELEASE_VER}-${RPM_RELEASE}${DIST_TAG}.src.rpm" >> ${GITHUB_ENV} + - name: install tools and dependencies + run: | + dnf install -y rpm-build findutils clang-tools-extra 'dnf-command(builddep)' 'dnf-command(config-manager)' + dnf config-manager --set-enabled powertools + dnf builddep -y mouse_m908.spec + - name: build mouse_m908 rpm package + run: | + make -j4 rpm + make -j4 src-rpm + + - name: upload rpm package artifact + uses: actions/upload-artifact@v2 + with: + name: ${{ env.RPM_NAME }} + path: ${{ env.RPM_NAME }} + - name: upload src rpm package artifact + uses: actions/upload-artifact@v2 + with: + name: ${{ env.SRPM_NAME }} + path: ${{ env.SRPM_NAME }} + + - name: download release-upload-url artifact + uses: actions/download-artifact@v2 + with: + name: release-upload-url + path: release-upload-url + - name: set upload url environment var + run: | + echo "UPLOAD_URL=$(cat release-upload-url/release-upload-url)" >> ${GITHUB_ENV} + - name: upload rpm package to release page + id: upload-release-rpm + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ env.UPLOAD_URL }} + asset_path: ./${{ env.RPM_NAME }} + asset_name: ${{ env.RPM_NAME }} + asset_content_type: application/octet-stream + - name: upload src rpm package to release page + id: upload-release-srpm + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ env.UPLOAD_URL }} + asset_path: ./${{ env.SRPM_NAME }} + asset_name: ${{ env.SRPM_NAME }} asset_content_type: application/octet-stream