diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 604e452..1098c90 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,23 +7,13 @@ on: jobs: build: runs-on: [moon, amd64] - container: - image: harbor.hq.rosti.cz/library/builder:38 - env: - REPO: harbor.hq.rosti.cz - USERNAME: robot$rosti+rosti - # ports: - # - 80 - # volumes: - # - my_docker_volume:/volume_mount - # options: --cpus 1 steps: - uses: actions/checkout@v4 - name: Test build run: | - echo "${{ secrets.repo_password }}" | podman login -u $USERNAME --password-stdin $REPO - # task build - # task test + # echo "${{ secrets.repo_password }}" | podman login -u $USERNAME --password-stdin $REPO + docker login gitea.ceperka.net -u "${{ secrets.REPO_USERNAME }}" -p "${{ secrets.REPO_PASSWORD }}" + task pipeline REPO=gitea.ceperka.net/rosti/runtime VERSION=pipeline diff --git a/Dockerfile b/Dockerfile index de0bcc4..cbe1c89 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,9 +4,9 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update RUN DEBIAN_FRONTEND=noninteractive apt-get upgrade -y RUN DEBIAN_FRONTEND=noninteractive apt-get install -y wget gpg -RUN echo "deb http://deb.debian.org/debian/ bullseye main contrib non-free" > /etc/apt/sources.list && \ - echo "deb http://security.debian.org/debian-security bullseye-security main" >> /etc/apt/sources.list && \ - echo "deb http://deb.debian.org/debian/ bullseye-updates main contrib non-free" >> /etc/apt/sources.list +RUN echo "deb http://deb.debian.org/debian/ bookworm main contrib non-free" > /etc/apt/sources.list && \ + echo "deb http://security.debian.org/debian-security bookworm-security main" >> /etc/apt/sources.list && \ + echo "deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free" >> /etc/apt/sources.list RUN DEBIAN_FRONTEND=noninteractive apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales libffi-dev \ libssl-dev default-libmysqlclient-dev ca-certificates libpq-dev libjpeg62 libjpeg-dev \ @@ -14,14 +14,19 @@ libpng-dev libpng-dev build-essential git mercurial build-essential \ libbz2-dev libsqlite3-dev libreadline-dev zlib1g-dev libncurses5-dev \ libgdbm-dev libgd-dev cron git subversion vim nano mc htop procps \ dropbear gettext wget redis-server memcached supervisor curl ssh \ -mariadb-client postgresql-client-13 postgresql-13-postgis-3-scripts bind9-host dnsutils nginx nginx-extras libnginx-mod-http-image-filter \ +mariadb-client postgresql-client-15 postgresql-15-postgis-3-scripts bind9-host dnsutils nginx nginx-extras libnginx-mod-http-image-filter \ libxml2-dev libxslt1-dev openssh-sftp-server links2 lynx \ imagemagick libmagick++-6.q16-dev libmagick++-6.q16hdri-dev libmagickwand-dev ncdu libsodium-dev \ python3 python3-pip python3-virtualenv \ -libcurl4-openssl-dev python-dev libproj-dev gdal-bin libmemcached-dev swig mutt \ +libcurl4-openssl-dev python3-dev libproj-dev gdal-bin libmemcached-dev swig mutt \ ffmpeg libyaml-dev libc-client2007e-dev libonig-dev libkrb5-dev dialog \ whiptail tmux rsync nmap libzip-dev libfreetype6-dev \ -jpegoptim optipng pngquant gifsicle webp libvpx-dev libwebp-dev jq inotify-tools ripgrep +jpegoptim optipng pngquant gifsicle webp libvpx-dev libwebp-dev jq inotify-tools ripgrep \ +wkhtmltopdf libzbar0 fzf + +# This is stange thing in Debian 12, it blocks installation of chromium +RUN DEBIAN_FRONTEND=noninteractive apt-get remove -y luit +RUN DEBIAN_FRONTEND=noninteractive apt-get install -y chromium WORKDIR /srv @@ -42,45 +47,66 @@ ENV TERM xterm ############# ## Node.js +# From https://nodejs.org/en/about/previous-releases WORKDIR /usr/src ADD build_node.sh /usr/local/bin/build_node.sh -# 2023/08 -RUN build_node.sh 19.9.0 -RUN build_node.sh 18.17.1 -RUN build_node.sh 20.5.1 -RUN build_node.sh 20.9.0 -RUN build_node.sh 21.2.0 +RUN build_node.sh 18.20.4 +RUN build_node.sh 20.16.0 +RUN build_node.sh 21.7.3 +RUN build_node.sh 22.5.1 ## Python +# https://www.python.org/downloads/ WORKDIR /usr/src ADD build_python.sh /usr/local/bin/build_python.sh -# 2023/08 -RUN build_python.sh 3.10.12 -RUN build_python.sh 3.10.13 -RUN build_python.sh 3.11.4 -RUN build_python.sh 3.11.6 -RUN build_python.sh 3.12.0 +RUN build_python.sh 3.11.9 +RUN build_python.sh 3.12.4 ## PHP 8 +# https://www.php.net/downloads.php ADD build_php8.sh /usr/local/bin/build_php8.sh -# 2023/08 -RUN build_php8.sh 8.1.21 -RUN build_php8.sh 8.1.25 -RUN build_php8.sh 8.2.7 -RUN build_php8.sh 8.2.12 +RUN build_php8.sh 8.2.15 +RUN build_php8.sh 8.2.21 +RUN build_php8.sh 8.3.6 +RUN build_php8.sh 8.3.9 ## Ruby +# https://www.ruby-lang.org/en/downloads/releases/ WORKDIR /usr/src ADD build_ruby.sh /usr/local/bin/build_ruby.sh -# 2023/08 -RUN build_ruby.sh 3.1.4 -RUN build_ruby.sh 3.2.2 +RUN build_ruby.sh 3.2.5 +RUN build_ruby.sh 3.3.4 ## Deno +# From: https://github.com/denoland/deno/releases ADD build_deno.sh /usr/local/bin/build_deno.sh -# 2023/08 -RUN build_deno.sh 1.36.1 -RUN build_deno.sh 1.38.2 +RUN build_deno.sh 1.45.4 + +# Bun +# From here: https://bun.sh/ +ADD build_bun.sh /usr/local/bin/build_bun.sh +RUN build_bun.sh 1.1.21 + +# OpenJDK +# From here: https://jdk.java.net/ +ADD build_openjdk.sh /usr/local/bin/build_openjdk.sh +RUN build_openjdk.sh 22.0.2 c9ecb94cd31b495da20a27d4581645e8 + +# Golang +# From here: https://go.dev/dl/ +ADD build_golang.sh /usr/local/bin/build_golang.sh +RUN build_golang.sh 1.22.5 + + +############# + +# WKHTMLTOX This is not in development anymore so we will remove it with next version of Debian + +WORKDIR /usr/src +RUN apt install -f xfonts-75dpi && \ + wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.bookworm_amd64.deb && \ + dpkg -i wkhtmltox_0.12.6.1-3.bookworm_amd64.deb && \ + rm wkhtmltox_0.12.6.1-3.bookworm_amd64.deb ############# @@ -121,6 +147,10 @@ ADD ./rosti.tmpl.sh /usr/src/ ADD ./Dockerfile /usr/src/ RUN cd /usr/src && /usr/local/bin/gen_rosti.fish > /usr/local/bin/rosti && chmod 755 /usr/local/bin/rosti +## Rosti tooling + +ADD ./activate_tech.fish /usr/local/bin/activate_tech + ## Cleaning RUN apt-get clean && rm -rf /usr/src/* diff --git a/Taskfile.yml b/Taskfile.yml index 83fd3e1..eed3c9c 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -4,7 +4,7 @@ version: '3' vars: REPO: harbor.hq.rosti.cz/rosti/runtime - VERSION: 2023.12-1 + VERSION: 2024.09-1 BASEIMAGE: debian:bookworm tasks: @@ -12,6 +12,12 @@ tasks: deps: - build + pipeline: + cmds: + - task: build + - task: test + - task: push + build: cmds: - docker pull {{ .BASEIMAGE }} @@ -35,5 +41,5 @@ tasks: push: cmds: - docker push {{ .REPO }}:{{ .VERSION }} - deps: - - squashed + # deps: + # - squashed diff --git a/activate_tech.fish b/activate_tech.fish new file mode 100755 index 0000000..a46f321 --- /dev/null +++ b/activate_tech.fish @@ -0,0 +1,24 @@ +#!/usr/bin/fish + +for techline in (ls /opt/techs | fzf --layout reverse) + set tech (echo $techline | string split -f 1 - ) + set ver (echo $techline | string split -f 2 - ) + + test -e /srv/bin/active_$tech && unlink /srv/bin/active_$tech + + set primary_tech (readlink /srv/bin/primary_tech | string split -f 4 / | string split -f 1 "-") + if test $primary_tech = $tech + set_color -b red + echo "Technology $tech is already activated as primary tech, you can't activate it as secondary." + set_color normal + continue + end + + set_color yellow + echo "Activating $tech-$ver" + set_color normal + ln -s /opt/techs/$tech-$ver/bin /srv/bin/active_$tech + set_color green + echo "Done." + set_color normal +end diff --git a/build_bun.sh b/build_bun.sh new file mode 100755 index 0000000..3bacbf2 --- /dev/null +++ b/build_bun.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +set -e + +mkdir -p /opt/techs + +VERSION=$1 + +cd /usr/src + + +wget https://github.com/oven-sh/bun/releases/download/bun-v$VERSION/bun-linux-x64.zip +unzip bun-linux-x64.zip +mkdir -p /opt/techs/bun-$VERSION +mv bun-linux-x64 /opt/techs/bun-$VERSION/bin +rm bun-linux-x64.zip diff --git a/build_golang.sh b/build_golang.sh new file mode 100755 index 0000000..8ed8062 --- /dev/null +++ b/build_golang.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -e + +mkdir -p /opt/techs + +VERSION=$1 +HASH=$2 + +cd /usr/src + +wget https://go.dev/dl/go${VERSION}.linux-amd64.tar.gz +tar xf go${VERSION}.linux-amd64.tar.gz +mv go /opt/techs/golang-$VERSION +rm go${VERSION}.linux-amd64.tar.gz diff --git a/build_openjdk.sh b/build_openjdk.sh new file mode 100755 index 0000000..d768008 --- /dev/null +++ b/build_openjdk.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -e + +mkdir -p /opt/techs + +VERSION=$1 +HASH=$2 + +cd /usr/src + +wget https://download.java.net/java/GA/jdk${VERSION}/${HASH}/9/GPL/openjdk-${VERSION}_linux-x64_bin.tar.gz +tar xf openjdk-${VERSION}_linux-x64_bin.tar.gz +mv jdk-${VERSION} /opt/techs/openjdk-$VERSION +rm openjdk-${VERSION}_linux-x64_bin.tar.gz diff --git a/build_php8.sh b/build_php8.sh index 8a738a9..88f724d 100755 --- a/build_php8.sh +++ b/build_php8.sh @@ -4,6 +4,7 @@ set -e VERSION=$1 + mkdir -p /opt/techs cd /usr/src @@ -71,12 +72,20 @@ cd - echo "no" | /opt/techs/php-$VERSION/bin/pecl install redis echo "no" | /opt/techs/php-$VERSION/bin/pecl install mongodb +export PATH=$PATH:/opt/techs/php-$VERSION/bin +composer.phar require ext-simplexml + echo "zend_extension=opcache.so" > /opt/techs/php-$VERSION/etc/conf.d/extensions.ini echo "extension=redis.so" >> /opt/techs/php-$VERSION/etc/conf.d/extensions.ini echo "extension=mongodb.so" >> /opt/techs/php-$VERSION/etc/conf.d/extensions.ini + # Not supported yet # https://github.com/Imagick/imagick/issues/358 -echo "no" | /opt/techs/php-$VERSION/bin/pecl install imagick -echo "extension=imagick.so" >> /opt/techs/php-$VERSION/etc/conf.d/extensions.ini +# We ignore PHP 8.3.2 until it's fixed +if [ "$VERSION" != "8.3.2" -a "$VERSION" != "8.3.6" -a "$VERSION" != "8.3.9" ]; then + echo "no" | /opt/techs/php-$VERSION/bin/pecl install imagick + echo "extension=imagick.so" >> /opt/techs/php-$VERSION/etc/conf.d/extensions.ini +fi + ln -s /srv/conf/php-fpm/php.ini /opt/techs/php-$VERSION/etc/conf.d/99-app.ini diff --git a/build_ruby.sh b/build_ruby.sh index 20612dd..9bfae61 100755 --- a/build_ruby.sh +++ b/build_ruby.sh @@ -21,3 +21,7 @@ make install /opt/techs/ruby-${VERSION}/bin/gem update --system /opt/techs/ruby-${VERSION}/bin/gem install passenger + +git clone --depth 1 https://github.com/rbenv/rbenv.git /opt/techs/ruby-$VERSION/rbenv +ln -s /opt/techs/ruby-$VERSION/rbenv/libexec/rbenv /opt/techs/ruby-$VERSION/bin/rbenv + diff --git a/etc/bashrc_local b/etc/bashrc_local index f81b7e1..45c5034 100644 --- a/etc/bashrc_local +++ b/etc/bashrc_local @@ -1,4 +1,16 @@ export PATH=/srv/bin/primary_tech:/srv/bin/primary_tech/sbin:/srv/bin:$PATH:/usr/sbin:/sbin +export PATH=$PATH:/srv/bin/active_bun +export PATH=$PATH:/srv/bin/active_deno +export PATH=$PATH:/srv/bin/active_golang +export PATH=$PATH:/srv/bin/active_node +export PATH=$PATH:/srv/bin/active_openjdk +export PATH=$PATH:/srv/bin/active_php +export PATH=$PATH:/srv/bin/active_python +export PATH=$PATH:/srv/bin/active_ruby + +# Ruby related variables +export BUNDLE_PATH=/srv/tmp/cache +export GEM_HOME=/srv/.gem # Use only if the shell is opened via SSH if [ -n "$SSH_TTY" ]; then diff --git a/examples/bun/app.js b/examples/bun/app.js new file mode 100644 index 0000000..fc77756 --- /dev/null +++ b/examples/bun/app.js @@ -0,0 +1,74 @@ + +const content = ` + +
+ + + +Na Roští.cz a prostředí pro vaši aplikaci je připraveno.
+V adresáři /srv/app
najdete tuto stránku napsanou v Bun, která funguje zároveň jako ukázka, kterou se můžete inspirovat pro nasazení vašeho vlastního kódu.
HTTP server vaší aplikace spusťte na portu 8080
. Nezapomeňte si projít naši dokumentaci, kde máme popsané mechanismy, na kterých náš hosting funguje.
V případě problémů se prosím obraťte na technickou podporu nebo na dokumentaci.
+Tým Roští.cz | @we@rosti.social
+Nyní je nutné přihlásit se do kontejneru s vaší aplikací přes SSH a použít příkaz rosti k základnímu nastavení prostředí. Přístupy najdete v naší administraci v info kartě aplikace.
V případě problémů se prosím obraťte na technickou podporu nebo na dokumentaci.
- +Tým Roští.cz | @we@rosti.social
+