forked from vpenso/prometheus-slurm-exporter
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from stackhpc/ci/build-rpms
Build RPMs in GitHub actions
- Loading branch information
Showing
3 changed files
with
199 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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/*" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 git@github.com: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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|