diff --git a/.github/workflows/AlmaLinux.yml b/.github/workflows/AlmaLinux.yml new file mode 100644 index 0000000..f014e7e --- /dev/null +++ b/.github/workflows/AlmaLinux.yml @@ -0,0 +1,60 @@ +# See: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions + +# Workflow name +name: AlmaLinux 8.5 RPM build + +# Run on event push +on: push + +jobs: + + # + # Build on AlmaLinux 8.5 using golang version 1.16 + # + AlmaLinux-RPM-build: + runs-on: ubuntu-latest + container: almalinux:8.5 + steps: + + # Use dnf to install development packages + - name: Install development packages + run: dnf --assumeyes group install "Development Tools" "RPM Development Tools" + + # Checkout git repository and submodules + # fetch-depth must be 0 to use git describe + # See: https://github.com/marketplace/actions/checkout + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + fetch-depth: 0 + + # Use dnf to install build dependencies + - name: Install build dependencies + run: dnf --assumeyes builddep scripts/cc-metric-collector.spec + + - name: RPM build MetricCollector + id: rpmbuild + run: make RPM + + # See: https://github.com/actions/upload-artifact + - name: Save RPM as artifact + uses: actions/upload-artifact@v2 + with: + name: cc-metric-collector RPM AlmaLinux 8.5 + path: ${{ steps.rpmbuild.outputs.RPM }} + - name: Save SRPM as artifact + uses: actions/upload-artifact@v2 + with: + name: cc-metric-collector SRPM AlmaLinux 8.5 + path: ${{ steps.rpmbuild.outputs.SRPM }} + + # See: https://github.com/softprops/action-gh-release + - name: Release + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/') + with: + name: cc-metric-collector-${{github.ref_name}} + files: | + ${{ steps.rpmbuild.outputs.RPM }} + ${{ steps.rpmbuild.outputs.SRPM }} \ No newline at end of file diff --git a/.github/workflows/runonce.yml b/.github/workflows/runonce.yml index da5b86c..be161ea 100644 --- a/.github/workflows/runonce.yml +++ b/.github/workflows/runonce.yml @@ -1,46 +1,68 @@ +# See: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions + +# Workflow name name: Run Test + +# Run on event push on: push jobs: + # + # Job build-1-17 + # Build on latest Ubuntu using golang version 1.17 + # build-1-17: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + # See: https://github.com/marketplace/actions/checkout + # Checkout git repository and submodules + - name: Checkout + uses: actions/checkout@v2 with: submodules: recursive # See: https://github.com/marketplace/actions/setup-go-environment - name: Setup Golang - uses: actions/setup-go@v2.1.5 + uses: actions/setup-go@v2 with: - go-version: '^1.17.6' + go-version: '^1.17.7' + # Install libganglia - name: Setup Ganglia run: sudo apt install ganglia-monitor libganglia1 - name: Build MetricCollector run: make - - name: Run MetricCollector + - name: Run MetricCollector once run: ./cc-metric-collector --once --config .github/ci-config.json + + # + # Job build-1-16 + # Build on latest Ubuntu using golang version 1.16 + # build-1-16: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + # See: https://github.com/marketplace/actions/checkout + # Checkout git repository and submodules + - name: Checkout + uses: actions/checkout@v2 with: submodules: recursive # See: https://github.com/marketplace/actions/setup-go-environment - name: Setup Golang - uses: actions/setup-go@v2.1.5 + uses: actions/setup-go@v2 with: go-version: '^1.16.7' # The version AlmaLinux 8.5 uses + # Install libganglia - name: Setup Ganglia run: sudo apt install ganglia-monitor libganglia1 - name: Build MetricCollector run: make - - name: Run MetricCollectorlibganglia1 + - name: Run MetricCollector once run: ./cc-metric-collector --once --config .github/ci-config.json diff --git a/Makefile b/Makefile index b32fb6b..e0ec475 100644 --- a/Makefile +++ b/Makefile @@ -56,3 +56,33 @@ vet: staticcheck: go install honnef.co/go/tools/cmd/staticcheck@latest $$(go env GOPATH)/bin/staticcheck ./... + +.ONESHELL: +.PHONY: RPM +RPM: scripts/cc-metric-collector.spec + @WORKSPACE="$${PWD}" + @SPECFILE="$${WORKSPACE}/scripts/cc-metric-collector.spec" + # Setup RPM build tree + @eval $$(rpm --eval "ARCH='%{_arch}' RPMDIR='%{_rpmdir}' SOURCEDIR='%{_sourcedir}' SPECDIR='%{_specdir}' SRPMDIR='%{_srcrpmdir}' BUILDDIR='%{_builddir}'") + @mkdir --parents --verbose "$${RPMDIR}" "$${SOURCEDIR}" "$${SPECDIR}" "$${SRPMDIR}" "$${BUILDDIR}" + # Create source tarball + @COMMITISH="HEAD" + @VERS=$$(git describe --tags $${COMMITISH}) + @VERS=$${VERS#v} + @VERS=$${VERS//-/_} + @eval $$(rpmspec --query --queryformat "NAME='%{name}' VERSION='%{version}' RELEASE='%{release}' NVR='%{NVR}' NVRA='%{NVRA}'" --define="VERS $${VERS}" "$${SPECFILE}") + @PREFIX="$${NAME}-$${VERSION}" + @FORMAT="tar.gz" + @SRCFILE="$${SOURCEDIR}/$${PREFIX}.$${FORMAT}" + @git archive --verbose --format "$${FORMAT}" --prefix="$${PREFIX}/" --output="$${SRCFILE}" $${COMMITISH} + # Build RPM and SRPM + @rpmbuild -ba --define="VERS $${VERS}" --rmsource --clean "$${SPECFILE}" + # Report RPMs and SRPMs when in GitHub Workflow + @if [[ "$${GITHUB_ACTIONS}" == true ]]; then + @ RPMFILE="$${RPMDIR}/$${ARCH}/$${NVRA}.rpm" + @ SRPMFILE="$${SRPMDIR}/$${NVR}.src.rpm" + @ echo "RPM: $${RPMFILE}" + @ echo "SRPM: $${SRPMFILE}" + @ echo "::set-output name=SRPM::$${SRPMFILE}" + @ echo "::set-output name=RPM::$${RPMFILE}" + @fi diff --git a/collectors/Makefile b/collectors/Makefile index 0c637b5..379a2d6 100644 --- a/collectors/Makefile +++ b/collectors/Makefile @@ -55,16 +55,13 @@ $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION): $(BUILD_FOLDER)/likwid-$(LIKWID_VERSIO tar -C $(BUILD_FOLDER) -xf $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION).tar.gz $(INSTALL_FOLDER)/liblikwid.a: $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION) $(INSTALL_FOLDER) - sed -i -e s+"PREFIX ?= .*"+"PREFIX = $(LIKWID_BASE)"+g \ - -e s+"SHARED_LIBRARY = .*"+"SHARED_LIBRARY = false"+g \ - -e s+"ACCESSMODE = .*"+"ACCESSMODE = $(ACCESSMODE)"+g \ - -e s+"INSTALLED_ACCESSDAEMON = .*"+"INSTALLED_ACCESSDAEMON = $(DAEMON_INSTALLDIR)/likwid-accessD"+g \ - $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION)/config.mk - cd $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION) && make - cp $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION)/liblikwid.a $(INSTALL_FOLDER) - cp $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION)/ext/hwloc/liblikwid-hwloc.a $(INSTALL_FOLDER) - cp $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION)/src/includes/likwid*.h $(INSTALL_FOLDER) - cp $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION)/src/includes/bstrlib.h $(INSTALL_FOLDER) + cd "$(BUILD_FOLDER)/likwid-$(LIKWID_VERSION)" && make "PREFIX=$(LIKWID_BASE)" "SHARED_LIBRARY=false" "ACCESSMODE=$(ACCESSMODE)" "INSTALLED_ACCESSDAEMON=$(DAEMON_INSTALLDIR)/likwid-accessD" + cp \ + $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION)/liblikwid.a \ + $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION)/ext/hwloc/liblikwid-hwloc.a \ + $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION)/src/includes/likwid*.h \ + $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION)/src/includes/bstrlib.h \ + $(INSTALL_FOLDER) $(DAEMON_INSTALLDIR)/likwid-accessD: $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION)/likwid-accessD sudo -u $(DAEMON_USER) -g $(DAEMON_GROUP) install -m 4775 $(BUILD_FOLDER)/likwid-$(LIKWID_VERSION)/likwid-accessD $(DAEMON_INSTALLDIR)/likwid-accessD diff --git a/scripts/cc-metric-collector.spec b/scripts/cc-metric-collector.spec index 65a9b55..9a1ec3b 100644 --- a/scripts/cc-metric-collector.spec +++ b/scripts/cc-metric-collector.spec @@ -1,5 +1,5 @@ Name: cc-metric-collector -Version: 0.2 +Version: %{VERS} Release: 1%{?dist} Summary: Metric collection daemon from the ClusterCockpit suite