Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions .github/workflows/build-and-release-rpm.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Release Prometheus Slurm Exporter RPM

on:
workflow_dispatch:
inputs:
release-tag:
type: string
description: Tag to release (e.g. 0.20)
required: true
jobs:
build-rocky-rpms:
runs-on: ubuntu-latest
container:
image: rockylinux:8.5

# Required to upload the built RPM to the release
permissions:
contents: write

steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Install Prerequisites
run: dnf install -y rpm-build rpmdevtools make git go

- name: Prepare RPMBUILD Environment
run: |
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS,tmp} &&
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros &&
cp README.md ~/rpmbuild/SOURCES &&
cp LICENSE ~/rpmbuild/SOURCES &&
cp lib/systemd/prometheus-slurm-exporter.service ~/rpmbuild/SOURCES &&
cp packages/rpm-ci/*.spec ~/rpmbuild/SPECS

- name: Build RPM
run: |
cd ~/rpmbuild || exit 1
spectool -g -R --define '_version ${{ github.event.inputs.release-tag }}' SPECS/prometheus-slurm-exporter.spec
rpmbuild -bb --define '_version ${{ github.event.inputs.release-tag }}' SPECS/prometheus-slurm-exporter.spec

- name: Move RPM
run: |
mkdir -p RPMS
cp ~/rpmbuild/RPMS/*/*.rpm RPMS/

- name: Release RPM
uses: softprops/action-gh-release@v1
with:
tag_name: "${{ github.event.inputs.release-tag }}"
files: "RPMS/*"
68 changes: 68 additions & 0 deletions packages/rpm-ci/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
## GitHub Actions rpmbuild environment

Generally this directory is used by the Release Prometheus Slurm Exporter RPM [workflow](https://github.com/stackhpc/prometheus-slurm-exporter/actions/workflows/build-and-release-rpm.yaml) to
build and release prometheus-slurm-exporter RPMs.

To trigger a build of an RPM for a new version of prometheus-slurm-exporter, run the following commands to sync the upstream repository:

```bash
git clone [email protected]:stackhpc/prometheus-slurm-exporter.git
cd prometheus-slurm-exporter
git remote add upstream https://github.com/vpenso/prometheus-slurm-exporter
git fetch upstream
git fetch upstream --tags
git checkout master
git merge upstream/master
git push origin master
git push origin master --tags
```

Then, the Release Prometheus Slurm Exporter RPM [workflow](https://github.com/stackhpc/prometheus-slurm-exporter/actions/workflows/build-and-release-rpm.yaml) can then be triggered with
with a newly-synced tag.


## Setup a development environment

In order to build your own RPMs you have to setup your own _development environment_ as explained [here](https://wiki.centos.org/HowTos/SetupRpmBuildEnvironment).

### Quick setup

1. Install the ``rpm-build`` and ``rpmdevtools`` packages.

2. Login as **normal user** and create the following structure in the home directory:
```bash
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
```
3. Create the RPM macros file with the following content:
```bash
echo "%_topdir $HOME/rpmbuild" > ~/.rpmmacros
```

### Prepare the build

4. Clone this repo:
```bash
git clone https://github.com/vpenso/prometheus-slurm-exporter.git
```
5. Get into the source directory and copy the following files under ``~/rpmbuild/SOURCES``:
```bash
cd prometheus-slurm-exporter
cp README.md ~/rpmbuild/SOURCES
cp LICENSE ~/rpmbuild/SOURCES
cp lib/systemd/prometheus-slurm-exporter.service ~/rpmbuild/SOURCES
```
6. Copy the SPEC file in the proper directory:
```bash
cd prometheus-slurm-exporter
cp packages/rpm-ci/*.spec ~/rpmbuild/SPECS
```

### Build the RPM package

8. Build the RPM based on your SPEC file:
```bash
cd $HOME/rpmbuild/SPECS
spectool -g -R --define '_version {prometheus_slurm_exporter_release_version}' prometheus-slurm-exporter.spec
rpmbuild -ba --define '_version {prometheus_slurm_exporter_release_version}' prometheus-slurm-exporter.spec
```
9. The RPM package will be placed under $HOME/rpmbuild/RPMS/x86_64
78 changes: 78 additions & 0 deletions packages/rpm-ci/prometheus-slurm-exporter.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
%define __spec_install_post %{nil}
%define debug_package %{nil}
%define __os_install_post %{_dbpath}/brp-compress

Name: prometheus-slurm-exporter
Version: %{_version}
Release: 1%{?dist}
Summary: Prometheus exporter for SLURM metrics
Group: Monitoring

License: GPL 3.0
URL: https://github.com/vpenso/prometheus-slurm-exporter

Source0: https://github.com/vpenso/prometheus-slurm-exporter/archive/refs/tags/%{version}.tar.gz
Source1: %{name}.service
Source2: LICENSE
Source3: README.md
Source4: %{name}

Requires(pre): shadow-utils

Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
%{?systemd_requires}
BuildRequires: systemd

BuildRoot: %{_tmppath}/%{name}-%{version}-1-root

%description
A Prometheus exporter for metrics extracted from the Slurm resource scheduling system.

%prep
%setup -q

%build
go build -v -o %{_sourcedir}/%{name}

%install
rm -rf %{buildroot}
mkdir -vp %{buildroot}
mkdir -vp %{buildroot}%{_unitdir}/
mkdir -vp %{buildroot}/usr/bin
mkdir -vp %{buildroot}/usr/share/doc/%{name}-%{version}
mkdir -vp %{buildroot}/var/lib/prometheus
install -m 644 %{SOURCE1} %{buildroot}/usr/lib/systemd/system/%{name}.service
install -m 644 %{SOURCE2} %{buildroot}/usr/share/doc/%{name}-%{version}/LICENSE
install -m 644 %{SOURCE3} %{buildroot}/usr/share/doc/%{name}-%{version}/README.md
install -m 755 %{SOURCE4} %{buildroot}/usr/bin/%{name}

%clean
rm -rf %{buildroot}

%pre
getent group prometheus >/dev/null || groupadd -r prometheus
getent passwd prometheus >/dev/null || \
useradd -r -g prometheus -d /var/lib/slurm_exporter -s /sbin/nologin \
-c "Prometheus exporter user" prometheus
exit 0

%post
%systemd_post %{name}.service

%preun
%systemd_preun %{name}.service

%postun
%systemd_postun_with_restart %{name}.service

%files
%defattr(-,root,root,-)
%doc LICENSE
%doc README.md
%{_bindir}/%{name}
/usr/share/doc/%{name}-%{version}/
%{_unitdir}/%{name}.service
%attr(755, prometheus, prometheus)/var/lib/prometheus