RPM build of engine in Fedora Copr #300
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
--- | |
name: RPM build of engine in Fedora Copr | |
on: | |
workflow_dispatch: | |
inputs: | |
lts-ver: | |
description: Engine Release (0 for nightly) | |
default: 0 | |
required: true | |
pkg-num: | |
description: Engine PKG number (for LTS Release) | |
default: 1 | |
required: true | |
git-ref: | |
description: Git Ref Branch | |
default: master | |
required: true | |
copr: | |
description: COPR Repository development for default | |
default: openquake-staging | |
required: true | |
schedule: | |
- cron: "0 19 * * *" | |
push: | |
branches: | |
- test_action_rpm | |
jobs: | |
build: | |
name: Submit and publish from Fedora 38 container | |
runs-on: ubuntu-latest | |
env: | |
GITHUB_DEF_BR: ${{ github.event.repository.default_branch }} | |
strategy: | |
matrix: | |
epel-release: [epel-7-x86_64, rocky+epel-8-x86_64, rocky+epel-9-x86_64] | |
#epel-release: [epel-7-x86_64, rocky+epel-8-x86_64] | |
# Run in Fedora container on Ubuntu VM | |
container: | |
image: fedora:38 | |
options: --privileged | |
steps: | |
- name: Clone Repository (Latest) | |
uses: actions/checkout@v3 | |
if: github.event.inputs.git-ref == '' | |
- name: Clone Repository (Custom Ref) | |
uses: actions/checkout@v3 | |
if: github.event.inputs.git-ref != '' | |
with: | |
ref: ${{ github.event.inputs.git-ref }} | |
- name: Add SHORT_SHA env property with commit short sha | |
run: echo "SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_ENV | |
- name: Install tooling for source RPM build | |
run: | | |
dnf --refresh -y install @development-tools @rpm-development-tools \ | |
copr-cli mock make gcc openssl-devel bzip2-devel libffi-devel | |
- name: Deploy SPEC file from template | |
env: | |
REPO: oq-engine | |
BRANCH: HEAD | |
STABLE: ${{ github.event.inputs.lts-ver }} | |
PKG: ${{ github.event.inputs.pkg-num }} | |
run: | | |
pwd | |
ls -lrt | |
mkdir -p ~/rpmbuild/{RPMS,SOURCES,SPECS,SRPMS} | |
id | |
ls -lrt ~/rpmbuild/* | |
# | |
LIB=$(cut -d "-" -f 2 <<< ${{ env.REPO }}) | |
VER=$(cat openquake/baselib/__init__.py | sed -n "s/^__version__[ ]*=[ ]*['\"]\([^'\"]\+\)['\"].*/\1/gp") | |
TIME=$(date +"%s") | |
echo "$LIB - ${SHA} - $VER $TIME" | |
echo "${SHA} ${{ env.REPO }} - ${{ env.BRANCH }}" | |
# | |
# | |
if [ "$STABLE" == "1" ]; then | |
sed "s/##_stable_##/${STABLE}/g;s/##_repo_##/${REPO}/g;s/##_version_##/${VER}/g;s/##_timestamp_##/${TIME}/g" rpm/python3-${REPO}.spec.inc > ~/rpmbuild/SPECS/python3-${REPO}.spec | |
cd .. | |
cp -pr oq-engine ${REPO}-${VER} | |
tar czf ~/rpmbuild/SOURCES/${REPO}-${VER}.tar.gz ${REPO}-${VER} | |
#git archive --format=tar --prefix=${REPO}-${VER}/ $BRANCH | gzip -9 > build-rpm/SOURCES/${REPO}-${VER}.tar.gz | |
sed -i "s/##_release_##/${PKG}/g" ~/rpmbuild/SPECS/python3-${REPO}.spec | |
else | |
STABLE=0 # set to 0 to avoid failure for schedule run | |
sed "s/##_stable_##/${STABLE}/g;s/##_repo_##/${REPO}/g;s/##_version_##/${VER}/g;s/##_timestamp_##/${TIME}/g" rpm/python3-${REPO}.spec.inc > ~/rpmbuild/SPECS/python3-${REPO}.spec | |
#git archive --format=tar --prefix=${REPO}-${VER}-git${SHA}/ $BRANCH | gzip -9 > ~/rpmbuild/SOURCES/${REPO}-${VER}-git${SHA}.tar.gz | |
cd .. | |
cp -pr oq-engine ${REPO}-${VER}-git${SHA} | |
tar czf ~/rpmbuild/SOURCES/${REPO}-${VER}-git${SHA}.tar.gz ${REPO}-${VER}-git${SHA} | |
sed -i "s/##_release_##/git${SHA}/g" ~/rpmbuild/SPECS/python3-${REPO}.spec | |
fi | |
cat ~/rpmbuild/SPECS/python3-${REPO}.spec | |
ls ~/rpmbuild/SPECS/* | |
ls ~/rpmbuild/SOURCES/* | |
- name: Build RPM from SPEC files | |
env: | |
REPO: oq-engine | |
BRANCH: HEAD | |
STABLE: ${{ github.event.inputs.lts-ver }} | |
run: | | |
spectool -g -R ~/rpmbuild/SPECS/python3-${REPO}.spec | |
rpmbuild -bs ~/rpmbuild/SPECS/python3-${REPO}.spec | |
rpmbuild -bb ~/rpmbuild/SPECS/python3-${REPO}.spec | |
SRPM=$(ls ~/rpmbuild/SRPMS/*.src.rpm) | |
mock -r ${{ matrix.epel-release}} $SRPM | |
- name: Publish Package on COPR | |
env: | |
API_TOKEN_CONTENT: ${{ secrets.COPR_API_TOKEN }} | |
COPR_REPO: ${{ github.event.inputs.copr }} | |
run: | | |
mkdir -p "$HOME/.config" | |
echo "$API_TOKEN_CONTENT" > "$HOME/.config/copr" | |
COPR_REPO=openquake-staging | |
echo "COPR REPO: $COPR_REPO" | |
SRPM=$(ls ~/rpmbuild/SRPMS/*.src.rpm) | |
copr-cli build ${COPR_REPO} $SRPM | |
- name: Upload artifacts of job | |
uses: actions/upload-artifact@v3 | |
with: | |
name: srpm_files | |
path: ~/rpmbuild/SRPMS/*.src.rpm | |
retention-days: 5 | |
if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` | |
test_rpm: | |
name: Test latest packages on RockyLinux8 | |
needs: build | |
runs-on: ubuntu-latest | |
container: | |
image: rockylinux:8 | |
options: --privileged | |
steps: | |
- name: Test created RPM use COPR Staging | |
env: | |
REPO: oq-engine | |
COPR_TEST: gem/openquake-staging | |
run: | | |
set -x | |
dnf update -y | |
dnf install -y dnf-plugins-core nc | |
dnf copr -y enable ${COPR_TEST} | |
#install oq-python3 required from RPM of engine | |
dnf install oq-python39 -y | |
dnf install python3-oq-engine -y | |
sleep 5 | |
# | |
mkdir /var/log/oq-engine/ | |
chown -R openquake /var/log/oq-engine/ | |
runuser -l openquake -c '/opt/openquake/venv/bin/oq dbserver start &' | |
# Wait the DbServer to come up | |
echo "Waiting DBServer up on port 1907...." | |
while ! nc -z localhost 1907; do | |
sleep 2 # wait for 1/10 of the second before check again | |
done | |
sleep 3 | |
oq --version | |
# | |
echo "Add settings for login and logging on webui before to start" | |
cd /opt/openquake/venv/lib/python3.9/site-packages/openquake/server/ | |
ls -lrt | |
cat > local_settings.py << EOF | |
LOCKDOWN = True | |
# | |
WEBUI_ACCESS_LOG_DIR = '/var/log/oq-engine' | |
EOF | |
echo "DISPLAY content of local_settings" | |
cat local_settings.py | |
# START WEBUI | |
runuser -l openquake -c '/opt/openquake/venv/bin/oq webui start 127.0.0.1:8800 -s &' | |
echo "Waiting WEBUI up on port 8800...." | |
while ! nc -z localhost 8800; do | |
sleep 5 # wait for 1/10 of the second before check again | |
done | |
echo "Test WebUI with curl before to test django" | |
sleep 1 | |
# Perform migration after setup local_settings | |
cd /opt/openquake/venv/lib/python3.9/site-packages/openquake/engine/ | |
runuser -l openquake -c '/opt/openquake/venv/bin/oq webui migrate' | |
sleep 1 | |
curl -L -I -X GET http://127.0.0.1:8800/accounts/login/ | |
echo -n "TEST DJANGO LOGIN " | |
LOGIN_URL=http://127.0.0.1:8800/accounts/login/ | |
YOUR_USER='username' | |
YOUR_PASS='password' | |
COOKIES=cookies.txt | |
CURL_BIN="curl -s -c $COOKIES -b $COOKIES -e $LOGIN_URL" | |
echo -n "Django Auth: get csrftoken ..." | |
$CURL_BIN $LOGIN_URL > /dev/null | |
DJANGO_TOKEN="csrfmiddlewaretoken=$(grep csrftoken $COOKIES | sed 's/^.*csrftoken\s*//')" | |
echo " perform login ..." | |
$CURL_BIN \ | |
-d "$DJANGO_TOKEN&username=$YOUR_USER&password=$YOUR_PASS" \ | |
-X POST $LOGIN_URL > /dev/null | |
echo "--------------------" | |
echo "display log of webui" | |
echo "--------------------" | |
cat /var/log/oq-engine/webui-access.log | |
if [ -s /var/log/oq-engine/webui-access.log ]; then | |
# The file is not-empty. | |
cat /var/log/oq-engine/webui-access.log | |
else | |
## The file is empty. | |
echo "Something not work as expected" | |
exit 1 | |
fi | |
# Run a calcs using https | |
# | |
oq engine --run https://downloads.openquake.org/jobs/risk_test.zip | |
upload_copr: | |
name: downloads artifacts and publish from Fedora 38 container | |
needs: test_rpm | |
runs-on: ubuntu-latest | |
env: | |
GITHUB_DEF_BR: ${{ github.event.repository.default_branch }} | |
strategy: | |
matrix: | |
epel-release: [rocky+epel-9-x86_64] | |
container: | |
image: fedora:38 | |
options: --privileged | |
steps: | |
- name: Create structure of downloaded files | |
run: mkdir -p ~/rpmbuild/{RPMS,SOURCES,SPECS,SRPMS} | |
- name: Download artifact of workflow to upload | |
uses: actions/download-artifact@v3 | |
with: | |
name: srpm_files | |
path: ~/rpmbuild/SRPMS | |
- name: Display structure of downloaded files | |
run: ls -rl ~/rpmbuild/{RPMS,SOURCES,SPECS,SRPMS} | |
- name: Install tooling for source RPM build | |
run: | | |
dnf --refresh -y install @development-tools @rpm-development-tools \ | |
copr-cli mock make gcc openssl-devel bzip2-devel libffi-devel | |
- name: Publish Package on COPR ${COPR_REPO} | |
env: | |
API_TOKEN_CONTENT: ${{ secrets.COPR_API_TOKEN }} | |
COPR_REPO: ${{ github.event.inputs.copr }} | |
run: | | |
mkdir -p "$HOME/.config" | |
echo "$API_TOKEN_CONTENT" > "$HOME/.config/copr" | |
if [ "$COPR_REPO" != "" ]; then | |
echo "COPR REPO: $COPR_REPO" | |
SRPM=$(ls ~/rpmbuild/SRPMS/*.src.rpm) | |
copr-cli build ${COPR_REPO} $SRPM | |
else | |
COPR_REPO=openquake | |
echo "COPR REPO: $COPR_REPO" | |
SRPM=$(ls ~/rpmbuild/SRPMS/*.src.rpm) | |
copr-cli build ${COPR_REPO} $SRPM | |
fi |