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