From 3557787588c763402c7c0c77107de722939c4bf5 Mon Sep 17 00:00:00 2001 From: Ben Kristinsson Date: Tue, 11 Oct 2022 11:13:41 +0200 Subject: [PATCH 1/3] try building a deb --- Dockerfile | 21 ++++++++++++-- deb/after-install.sh | 9 ++++++ deb/etc/systemd/system/sudoisbot@.service | 14 +++++++++ scripts/build/build-deb.sh | 29 +++++++++++++++++++ .../{docker-build.sh => build-docker.sh} | 0 5 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 deb/after-install.sh create mode 100644 deb/etc/systemd/system/sudoisbot@.service create mode 100755 scripts/build/build-deb.sh rename scripts/build/{docker-build.sh => build-docker.sh} (100%) diff --git a/Dockerfile b/Dockerfile index 516c90a..22c7128 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,14 +15,19 @@ RUN apt-get update && \ apt-get autoremove && \ apt-get autoclean && \ useradd -u ${UID} -ms /bin/bash ${USER_NAME} && \ - mkdir -p /opt/${REPO_NAME} && \ - chown -R -v ${USER_NAME}. /opt/${REPO_NAME} + mkdir -p /opt/${REPO_NAME} /usr/local/virtualenvs && \ + chown -R -v ${USER_NAME}. /opt/${REPO_NAME} /usr/local/virtualenvs -USER ${USER_NAME} WORKDIR /home/${USER_NAME} ENV PATH="/home/${USER_NAME}/.local/bin:${PATH}" FROM base as builder +RUN apt-get update && \ + apt-get install -y ruby ruby-dev rubygems && \ + apt-get autoremove && \ + apt-get autoclean && \ + gem install --no-document fpm +USER ${USER_NAME} ARG PIP_REPO_URL="https://git.sudo.is/api/packages/ben/pypi" ARG PIP_REPO_NAME="gitea" WORKDIR /opt/${REPO_NAME} @@ -31,9 +36,12 @@ WORKDIR /opt/${REPO_NAME} RUN python3 -m pip install poetry --pre && \ python3 -m pip cache purge && \ python3 -m poetry config repositories.${PIP_REPO_NAME} ${PIP_REPO_URL} && \ + python3 -m poetry config cache-dir "/usr/local/virtualenvs" && \ echo "repositories configured for poetry:" && \ python3 -m poetry config repositories && \ poetry self -V + + COPY --chown=${USER_NAME} .flake8 poetry.lock pyproject.toml /opt/${REPO_NAME}/ # install dependencies with poetry and then freeze them in a file, so @@ -56,10 +64,17 @@ RUN poetry run pytest && \ # because this way we dont need to deal with permissions RUN poetry build --no-interaction +COPY --chown=${USERNAME} deb /opt/${REPO_NAME}/deb/ +COPY --chown=${USERNAME} scripts/build/build-deb.sh /usr/local/bin/build-deb.sh +RUN /usr/local/bin/build-deb.sh +RUN dpkg -I dist/sudoisbot_*.deb && dpkg -c dist/sudoisbot_*.deb + + ENTRYPOINT ["poetry"] CMD ["build"] FROM base as final +USER ${USER_NAME} COPY --chown=${USER_NAME} --from=builder /opt/${REPO_NAME}/requirements.txt /opt/${REPO_NAME}/ RUN python3 -m pip install -r /opt/${REPO_NAME}/requirements.txt && \ python3 -m pip cache purge && \ diff --git a/deb/after-install.sh b/deb/after-install.sh new file mode 100644 index 0000000..890d49b --- /dev/null +++ b/deb/after-install.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +systemctl daemon-reload + +if `systemctl is-active --quiet sudoisbot@temp_pub`; then + echo -n "restarting temp_pub..." + service sudoisbot@temp_pub restart + echo "ok" +fi diff --git a/deb/etc/systemd/system/sudoisbot@.service b/deb/etc/systemd/system/sudoisbot@.service new file mode 100644 index 0000000..be2f335 --- /dev/null +++ b/deb/etc/systemd/system/sudoisbot@.service @@ -0,0 +1,14 @@ +[Unit] +Description=sudoisbot +After=syslog.target + +[Service] +User=sudoisbot +Group=sudoisbot +WorkingDirectory=/var/lib/sudoisbot +ExecStart=/usr/local/bin/sudoisbot %I +Restart=on-failure +RestartSec=6 + +[Install] +WantedBy=multi-user.target diff --git a/scripts/build/build-deb.sh b/scripts/build/build-deb.sh new file mode 100755 index 0000000..d90b361 --- /dev/null +++ b/scripts/build/build-deb.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +set -e + +DEPS="-d python3.10" + +pypoetry_venv_path=$(poetry env info -p) +version=$(poetry version -s) +pwd=$(pwd) + + +echo "pypoetry_venv_path: $pypoetry_venv_path" +echo "version: $version" + + +fpm \ + -a all \ + -t deb \ + $DEPS \ + -n ${REPO_NAME} \ + -v ${version} \ + --config-files /etc/systemd/system/sudoisbot@.service \ + --after-install deb/after-install.sh \ + -s dir \ + $pypoetry_venv_path \ + $pypoetry_venv_path=/usr/local/virtualenvs/${REPO_NAME} \ + $(pwd)/deb/etc/systemd/system/=/etc/systemd/system/ + +mv -v ${REPO_NAME}_*.deb dist/ diff --git a/scripts/build/docker-build.sh b/scripts/build/build-docker.sh similarity index 100% rename from scripts/build/docker-build.sh rename to scripts/build/build-docker.sh -- 2.40.1 From ef47e6d128042942983022840e2a200c826f99af Mon Sep 17 00:00:00 2001 From: Ben Kristinsson Date: Tue, 11 Oct 2022 14:21:11 +0200 Subject: [PATCH 2/3] use default virtualenv path --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 22c7128..230b984 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,8 +15,8 @@ RUN apt-get update && \ apt-get autoremove && \ apt-get autoclean && \ useradd -u ${UID} -ms /bin/bash ${USER_NAME} && \ - mkdir -p /opt/${REPO_NAME} /usr/local/virtualenvs && \ - chown -R -v ${USER_NAME}. /opt/${REPO_NAME} /usr/local/virtualenvs + mkdir -p /opt/${REPO_NAME} && \ + chown -R -v ${USER_NAME}. /opt/${REPO_NAME} WORKDIR /home/${USER_NAME} ENV PATH="/home/${USER_NAME}/.local/bin:${PATH}" @@ -36,11 +36,11 @@ WORKDIR /opt/${REPO_NAME} RUN python3 -m pip install poetry --pre && \ python3 -m pip cache purge && \ python3 -m poetry config repositories.${PIP_REPO_NAME} ${PIP_REPO_URL} && \ - python3 -m poetry config cache-dir "/usr/local/virtualenvs" && \ echo "repositories configured for poetry:" && \ python3 -m poetry config repositories && \ poetry self -V +# python3 -m poetry config cache-dir "/usr/local/virtualenvs" && \ COPY --chown=${USER_NAME} .flake8 poetry.lock pyproject.toml /opt/${REPO_NAME}/ -- 2.40.1 From 311564841ad1d4769cb3df0cbdfd3868e2ec3732 Mon Sep 17 00:00:00 2001 From: Ben Kristinsson Date: Wed, 9 Nov 2022 16:42:53 +0100 Subject: [PATCH 3/3] update link to point to the source for the correct shared pipeline --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 150a6e6..5b70186 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,7 +1,7 @@ @Library('shared-jenkins-pipelines') _ // source: -// https://git.sudo.is/ben/shared-jenkins-pipelines/src/branch/main/vars/pythondocker.groovy +// https://git.sudo.is/ben/shared-jenkins-pipelines/src/branch/main/vars/poetry.groovy poetry( docker: true, -- 2.40.1