aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitea/workflows/main.yml80
-rw-r--r--.scripts.d/10-check.sh16
-rw-r--r--.scripts.d/20-build.sh24
-rw-r--r--.scripts.d/30-test.sh17
-rw-r--r--.scripts.d/40-publish.sh63
-rw-r--r--Dockerfile6
-rw-r--r--Jenkinsfile33
7 files changed, 143 insertions, 96 deletions
diff --git a/.gitea/workflows/main.yml b/.gitea/workflows/main.yml
new file mode 100644
index 0000000..25f2393
--- /dev/null
+++ b/.gitea/workflows/main.yml
@@ -0,0 +1,80 @@
+name: Build and Push Docker Image
+on:
+ push: {}
+ pull_request: {}
+ schedule:
+ - cron: '0 */6 * * *'
+ workflow_dispatch: {}
+
+jobs:
+ find-latest-version:
+ runs-on: ubuntu-latest
+ container:
+ image: gitea.segundo.io/docker/ci-base:latest
+ credentials:
+ username: "${GITEA_REGISTRY_TOKEN}"
+ password: "${GITEA_REGISTRY_USER}"
+ outputs:
+ lt-version: ${{ steps.find-lt-version.outputs.lt-version }}
+ steps:
+ - uses: actions/checkout@v5
+ - id: find-lt-version
+ run: |
+ curl --silent --fail https://languagetool.org/download/ |
+ grep -o 'href=".*">' |
+ grep -Po '="\K[^"]+' |
+ grep -Po 'LanguageTool-\K\d\.\d+' |
+ sort -V |
+ tail -n 1 |
+ xargs -I {} echo "lt-version={}" >> $GITHUB_OUTPUT
+
+ check:
+ runs-on: ubuntu-latest
+ container: ghcr.io/super-linter/super-linter:latest
+ steps:
+ - uses: actions/checkout@v5
+ - run: |
+ bash .scripts.d/10-check.sh
+
+ build:
+ runs-on: ubuntu-latest
+ needs: [find-latest-version, check]
+ env:
+ LT_VERSION: ${{ needs.find-latest-version.outputs.lt-version }}
+ container:
+ image: gitea.segundo.io/docker/ci-base:latest
+ credentials:
+ username: "${GITEA_REGISTRY_TOKEN}"
+ password: "${GITEA_REGISTRY_USER}"
+ steps:
+ - uses: actions/checkout@v5
+ - run: |
+ bash .scripts.d/20-build.sh
+
+ test:
+ runs-on: ubuntu-latest
+ needs: build
+ container:
+ image: gitea.segundo.io/docker/ci-base:latest
+ credentials:
+ username: "${GITEA_REGISTRY_TOKEN}"
+ password: "${GITEA_REGISTRY_USER}"
+ steps:
+ - uses: actions/checkout@v5
+ - run: |
+ bash .scripts.d/30-test.sh
+
+ publish:
+ runs-on: ubuntu-latest
+ needs: [find-latest-version, test]
+ env:
+ LT_VERSION: ${{ needs.find-latest-version.outputs.lt-version }}
+ container:
+ image: gitea.segundo.io/docker/ci-base:latest
+ credentials:
+ username: "${GITEA_REGISTRY_TOKEN}"
+ password: "${GITEA_REGISTRY_USER}"
+ steps:
+ - uses: actions/checkout@v5
+ - run: |
+ bash .scripts.d/40-publish.sh
diff --git a/.scripts.d/10-check.sh b/.scripts.d/10-check.sh
index e8ddf59..71b3ab6 100644
--- a/.scripts.d/10-check.sh
+++ b/.scripts.d/10-check.sh
@@ -1,22 +1,12 @@
#!/bin/bash
-# vim: ai:ts=8:sw=8:noet
set -EeufCo pipefail
export SHELLOPTS # propagate set to children by default
IFS=$'\t\n'
# check required commands are in place
-command -v shellcheck >/dev/null 2>&1 || {
- echo 'please install shellcheck'
- exit 1
-}
-command -v hadolint >/dev/null 2>&1 || {
- echo 'please install hadolint'
- exit 1
-}
-command -v yamllint >/dev/null 2>&1 || {
- echo 'please install yamllint'
- exit 1
-}
+command -v shellcheck >/dev/null 2>&1 || { echo 'please install shellcheck'; exit 1; }
+command -v hadolint >/dev/null 2>&1 || { echo 'please install hadolint'; exit 1; }
+command -v yamllint >/dev/null 2>&1 || { echo 'please install yamllint'; exit 1; }
# check all the Dockerfiles with hadolint
find . \
diff --git a/.scripts.d/20-build.sh b/.scripts.d/20-build.sh
index 56af8df..b077ac3 100644
--- a/.scripts.d/20-build.sh
+++ b/.scripts.d/20-build.sh
@@ -5,14 +5,20 @@ export SHELLOPTS # propagate set to children by default
IFS=$'\t\n'
# check required commands are in place
-command -v docker >/dev/null 2>&1 || {
- echo 'please install docker-client'
- exit 1
-}
+command -v docker >/dev/null 2>&1 || { echo 'please install docker-client'; exit 1; }
+# shellcheck disable=SC2001
+REGISTRY=$(echo "${GITHUB_SERVER_URL}" | sed -e 's|^[^/]*//||')
+TAG="${GITHUB_RUN_ID}"
+IMAGE_NAME="${REGISTRY}/${GITHUB_REPOSITORY,,}:${TAG}"
+
+echo "${GITEA_REGISTRY_TOKEN}" |
+ docker login "${REGISTRY}" -u "${GITEA_REGISTRY_USER}" --password-stdin
+
+docker buildx create --name builder --use --bootstrap
docker buildx build \
- --no-cache \
- --pull \
- --load \
- --tag "chn2guevara/languagetool:${BUILD_ID}" \
- .
+ --platform linux/amd64,linux/arm64 \
+ --tag "${IMAGE_NAME}" \
+ --build-arg VERSION="${LT_VERSION}" \
+ --push \
+ .
diff --git a/.scripts.d/30-test.sh b/.scripts.d/30-test.sh
index a357caf..ae4e78c 100644
--- a/.scripts.d/30-test.sh
+++ b/.scripts.d/30-test.sh
@@ -13,10 +13,11 @@ command -v docker >/dev/null 2>&1 || {
# install goss
curl -fsSL https://goss.rocks/install | sh
-export GOSS_SLEEP=${GOSS_SLEEP:-30}
+export GOSS_SLEEP=${GOSS_SLEEP:-60}
export GOSS_VARS=${GOSS_VARS:-}
export GOSS_ADDITIONAL_COPY_PATH=${GOSS_ADDITIONAL_COPY_PATH:-}
-export GOSS_OPTS="--format junit --no-color"
+export GOSS_OPTS="--no-color"
+export DEBUG=false
export CONTAINER_LOG_OUTPUT=${CONTAINER_LOG_OUTPUT:-}
# The default 'mount' strategy uses 'sleep infinity' to keep
@@ -29,6 +30,12 @@ fi
goss --gossfile goss.yaml render >goss-full.yaml
mv goss-full.yaml goss.yaml
-rm -rf build/reports/
-mkdir -p build/reports/
-dgoss run "chn2guevara/languagetool:${BUILD_ID}" > build/reports/goss.xml
+# shellcheck disable=SC2001
+REGISTRY=$(echo "${GITHUB_SERVER_URL}" | sed -e 's|^[^/]*//||')
+TAG="${GITHUB_RUN_ID}"
+IMAGE_NAME="${REGISTRY}/${GITHUB_REPOSITORY,,}:${TAG}"
+
+echo "${GITEA_REGISTRY_TOKEN}" |
+ docker login "${REGISTRY}" -u "${GITEA_REGISTRY_USER}" --password-stdin
+
+dgoss run "${IMAGE_NAME}"
diff --git a/.scripts.d/40-publish.sh b/.scripts.d/40-publish.sh
index 58ef019..68820d0 100644
--- a/.scripts.d/40-publish.sh
+++ b/.scripts.d/40-publish.sh
@@ -5,41 +5,36 @@ export SHELLOPTS # propagate set to children by default
IFS=$'\t\n'
# check required commands are in place
-command -v docker >/dev/null 2>&1 || {
- echo 'please install docker-client'
- exit 1
-}
+command -v docker >/dev/null 2>&1 || { echo 'please install docker-client'; exit 1; }
-docker login --username "chn2guevara" \
- --password-stdin <<<"$DOCKERHUB_TOKEN"
+# shellcheck disable=SC2001
+REGISTRY=$(echo "${GITHUB_SERVER_URL}" | sed -e 's|^[^/]*//||')
+TAG="${GITHUB_RUN_ID}"
+IMAGE_TEST_NAME="${REGISTRY}/${GITHUB_REPOSITORY,,}:${TAG}"
+IMAGE_INTERNAL_RELEASE_NAME_VERSIONED="${REGISTRY}/${GITHUB_REPOSITORY,,}:${LT_VERSION}"
+IMAGE_INTERNAL_RELEASE_NAME_LATEST="${REGISTRY}/${GITHUB_REPOSITORY,,}:latest"
+IMAGE_EXTERNAL_RELEASE_NAME_VERSIONED="docker.io/${DOCKERHUB_REGISTRY_USER}/languagetool:${LT_VERSION}"
+IMAGE_EXTERNAL_RELEASE_NAME_LATEST="docker.io/${DOCKERHUB_REGISTRY_USER}/languagetool:latest"
-BUILDER_SUFFIX=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 5 ; echo '')
-docker run --privileged --rm tonistiigi/binfmt --install arm64
-docker buildx create --use --name "multi-arch-builder-${BUILDER_SUFFIX}"
-trap "docker buildx rm 'multi-arch-builder-""${BUILDER_SUFFIX}""'" EXIT
+docker login "${REGISTRY}" -u "${GITEA_REGISTRY_USER}" --password-stdin <<<"${GITEA_REGISTRY_TOKEN}"
+docker login docker.io -u "${DOCKERHUB_REGISTRY_USER}" --password-stdin <<<"${DOCKERHUB_REGISTRY_TOKEN}"
-DOCKER_TAG="latest"
-if [ "$BRANCH_NAME" != "master" ]; then
- DOCKER_TAG="${BRANCH_NAME//\//-}"
-fi
+skopeo copy \
+ --all \
+ "docker://${IMAGE_TEST_NAME}" \
+ "docker://${IMAGE_INTERNAL_RELEASE_NAME_VERSIONED}"
-if [ "$(git tag --contains)" = "" ]; then
- docker buildx build \
- --platform linux/amd64,linux/arm64 \
- --builder "multi-arch-builder-${BUILDER_SUFFIX}" \
- --no-cache \
- --pull \
- --push \
- --tag "chn2guevara/languagetool:${DOCKER_TAG}" \
- .
-else
- docker buildx build \
- --platform linux/amd64,linux/arm64 \
- --builder "multi-arch-builder-${BUILDER_SUFFIX}" \
- --no-cache \
- --pull \
- --push \
- --tag "chn2guevara/languagetool:${DOCKER_TAG}" \
- --tag "chn2guevara/languagetool:$(git tag --contains | head -1)" \
- .
-fi
+skopeo copy \
+ --all \
+ "docker://${IMAGE_TEST_NAME}" \
+ "docker://${IMAGE_INTERNAL_RELEASE_NAME_LATEST}"
+
+skopeo copy \
+ --all \
+ "docker://${IMAGE_TEST_NAME}" \
+ "docker://${IMAGE_EXTERNAL_RELEASE_NAME_VERSIONED}"
+
+skopeo copy \
+ --all \
+ "docker://${IMAGE_TEST_NAME}" \
+ "docker://${IMAGE_EXTERNAL_RELEASE_NAME_LATEST}"
diff --git a/Dockerfile b/Dockerfile
index 079da19..92fa335 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,7 @@
-FROM openjdk:slim
+# hadolint ignore=DL3007
+FROM eclipse-temurin:latest
-ARG VERSION=6.4
+ARG VERSION=6.6
WORKDIR /home/languagetool
@@ -8,6 +9,7 @@ SHELL ["/bin/bash", "-eufo", "pipefail", "-c"]
# hadolint ignore=DL3008
RUN \
+ userdel ubuntu && \
groupadd -g 1000 languagetool && \
adduser \
--uid 1000 \
diff --git a/Jenkinsfile b/Jenkinsfile
deleted file mode 100644
index a16496b..0000000
--- a/Jenkinsfile
+++ /dev/null
@@ -1,33 +0,0 @@
-String cron_string = BRANCH_NAME == "master" ? "@weekly" : ""
-
-pipeline {
- agent any
- triggers { cron(cron_string) }
- options { ansiColor('xterm') }
- stages {
- stage('Check') {
- agent {
- docker {
- image 'ghcr.io/super-linter/super-linter:latest'
- args '--entrypoint ""'
- }
- }
- steps { sh 'bash .scripts.d/10-check.sh' }
- }
- stage('Build') { steps { sh 'bash .scripts.d/20-build.sh' } }
- stage('Test') { steps { sh 'bash .scripts.d/30-test.sh' } }
- stage('Publish') {
- environment { DOCKERHUB_TOKEN = credentials('DOCKERHUB_TOKEN') }
- steps { sh 'bash .scripts.d/40-publish.sh' }
- }
- }
- post {
- always {
- junit 'build/reports/*.xml'
- step([$class: 'Mailer',
- notifyEveryUnstableBuild: true,
- recipients: "christian+jenkins@segundo.io",
- sendToIndividuals: true])
- }
- }
-}