From 5e2c9edeec117beae10f0c1d8b00a374a7636110 Mon Sep 17 00:00:00 2001 From: "Maxim [maxirmx] Samsonov" Date: Tue, 25 Jun 2024 22:55:17 +0300 Subject: [PATCH 1/2] Created Ubuntu 20.04 container --- .github/workflows/build-containers.yml | 59 ++++++++++++++++++++++ test/tebako-test-run.rb | 10 ++++ tools/tools.sh | 66 ++++++++++++++++++++++++ ubuntu-20.04.Dockerfile | 69 ++++++++++++++++++++++++++ 4 files changed, 204 insertions(+) create mode 100644 .github/workflows/build-containers.yml create mode 100644 test/tebako-test-run.rb create mode 100755 tools/tools.sh create mode 100644 ubuntu-20.04.Dockerfile diff --git a/.github/workflows/build-containers.yml b/.github/workflows/build-containers.yml new file mode 100644 index 0000000..af450f3 --- /dev/null +++ b/.github/workflows/build-containers.yml @@ -0,0 +1,59 @@ +name: build-containers + +on: + push: +# branches: [ main ] +# paths-ignore: +# - '**.adoc' + tags: [ 'v*' ] + pull_request: + workflow_dispatch: + +concurrency: + group: '${{ github.workflow }}-${{ github.job }}-${{ github.head_ref || github.ref_name }}' + cancel-in-progress: true + +jobs: + build-containers: + name: ${{ matrix.container }} + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + strategy: + fail-fast: false + matrix: + container: + - 'ubuntu-20.04' + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ghcr.io + username: tamatebako + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Docker image + uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671 + with: + context: . + file: ./${{ matrix.container }}.Dockerfile + push: ${{ contains(github.ref, 'refs/tags/v') }} + tags: ghcr.io/tamatebako/tebako-${{ matrix.container }} + labels: | + latest + "org.opencontainers.image.source=${{ github.repositoryUrl }}" + + - name: Purge old versions + if: contains(github.ref, 'refs/tags/v') + continue-on-error: true + uses: actions/delete-package-versions@v4 + with: + package-name: 'tebako-${{ matrix.container }}' + package-type: 'container' + min-versions-to-keep: 1 + delete-only-untagged-versions: 'true' \ No newline at end of file diff --git a/test/tebako-test-run.rb b/test/tebako-test-run.rb new file mode 100644 index 0000000..f691bce --- /dev/null +++ b/test/tebako-test-run.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +puts "Hello!" +puts "Gem path: #{Gem.path}" +puts "Rubygems version: #{Gem::rubygems_version}" +if defined?(TebakoRuntime::VERSION) + puts "Using tebako-runtime v#{TebakoRuntime::VERSION}" +else + puts "Tebako runtime not loaded" +end \ No newline at end of file diff --git a/tools/tools.sh b/tools/tools.sh new file mode 100755 index 0000000..622b202 --- /dev/null +++ b/tools/tools.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +# Copyright (c) 2024 [Ribose Inc](https://www.ribose.com). +# All rights reserved. +# This file is a part of tamatebako +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +set -o errexit -o pipefail -o noclobber -o nounset + +: "${LOCAL_BUILDS:=/tmp/tebako}" +: "${CMAKE_VERSION:=3.24.4-1}" +: "${RUBY_VERSION:=3.1.6}" +: "${RUBY_INSTALL_VERSION:=0.9.3}" +: "${ARCH:=x64}" + +install_cmake() { + echo "Running install_cmake for CMake version ${CMAKE_VERSION} for ${ARCH}" + local cmake_install=${LOCAL_BUILDS}/cmake + mkdir -p ${cmake_install} + pushd ${cmake_install} + wget -nv https://github.com/xpack-dev-tools/cmake-xpack/releases/download/v${CMAKE_VERSION}/xpack-cmake-${CMAKE_VERSION}-linux-${ARCH}.tar.gz + tar -zxf xpack-cmake-${CMAKE_VERSION}-linux-${ARCH}.tar.gz --directory /usr --strip-components=1 --skip-old-files + popd + rm -rf ${cmake_install} +} + +install_ruby() { + echo "Running ruby_install version ${RUBY_INSTALL_VERSION} for Ruby ${RUBY_VERSION}" + local ruby_install=${LOCAL_BUILDS}/ruby_install + mkdir -p ${ruby_install} + pushd ${ruby_install} + wget -nv https://github.com/postmodern/ruby-install/releases/download/v${RUBY_INSTALL_VERSION}/ruby-install-${RUBY_INSTALL_VERSION}.tar.gz && \ + tar -xzvf ruby-install-${RUBY_INSTALL_VERSION}.tar.gz + cd ruby-install-${RUBY_INSTALL_VERSION} + make install + ruby-install --system ruby ${RUBY_VERSION} -- --without-gmp --disable-dtrace --disable-debug-env --disable-install-doc CC=${CC} + popd + rm -rf ${ruby_install} +} + +DIR0=$( dirname "$0" ) +DIR_TOOLS=$( cd "$DIR0" && pwd ) + +echo "Running tools.sh with args: $@, DIR_TOOLS: ${DIR_TOOLS}" + +"$@" diff --git a/ubuntu-20.04.Dockerfile b/ubuntu-20.04.Dockerfile new file mode 100644 index 0000000..87c8686 --- /dev/null +++ b/ubuntu-20.04.Dockerfile @@ -0,0 +1,69 @@ +# Copyright (c) 2024 [Ribose Inc](https://www.ribose.com). +# All rights reserved. +# This file is a part of tamatebako +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +FROM ubuntu:focal + +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=Etc/UTC +ENV ARCH=x64 + +RUN apt-get -y update && \ + apt-get -y install sudo wget git make pkg-config clang-12 clang++-12 \ + binutils-dev libevent-dev acl-dev libfmt-dev libjemalloc-dev \ + libdouble-conversion-dev libiberty-dev liblz4-dev liblzma-dev libssl-dev \ + libboost-filesystem-dev libboost-program-options-dev libboost-system-dev \ + libboost-iostreams-dev libboost-date-time-dev libboost-context-dev \ + libboost-regex-dev libboost-thread-dev libbrotli-dev libunwind-dev \ + libdwarf-dev libelf-dev libgoogle-glog-dev libffi-dev libgdbm-dev \ + libyaml-dev libncurses-dev libreadline-dev libutfcpp-dev libstdc++-10-dev + +ENV CC=clang-12 +ENV CXX=clang++-12 + +COPY tools /opt/tools + +RUN /opt/tools/tools.sh install_cmake && \ + /opt/tools/tools.sh install_ruby + +RUN gem install tebako + +ENV HOME=/home/tebako +RUN adduser --disabled-password --gecos "" --home $HOME tebako && \ + printf "\ntebako\tALL=(ALL)\tNOPASSWD:\tALL" > /etc/sudoers.d/tebako + +COPY test $HOME/test +USER tebako +WORKDIR $HOME + +# Create packaging environment for Ruby 3.1.5, 3.2.4 +# Test and "warm up" since initialization is fully finished after the first packaging +RUN tebako setup -p .tebako -R 3.1.5 && \ + tebako setup -p .tebako -R 3.2.4 && \ + tebako press -p .tebako -R 3.1.5 -r test -e tebako-test-run.rb -o ruby-3.1.5-package && \ + tebako press -p .tebako -R 3.2.4 -r test -e tebako-test-run.rb -o ruby-3.2.4-package && \ + rm ruby-*-package + +ENV PS1=PS1="\[\]\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\]" +CMD ["bash"] From f0ae3cae317f93d398b1689ff6066fa561c502d0 Mon Sep 17 00:00:00 2001 From: "Maxim [maxirmx] Samsonov" Date: Wed, 26 Jun 2024 11:13:09 +0300 Subject: [PATCH 2/2] Created Alpine 3.17 container --- .github/workflows/build-containers.yml | 1 + alpine-3.17.Dockerfile | 65 ++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 alpine-3.17.Dockerfile diff --git a/.github/workflows/build-containers.yml b/.github/workflows/build-containers.yml index af450f3..14783ca 100644 --- a/.github/workflows/build-containers.yml +++ b/.github/workflows/build-containers.yml @@ -25,6 +25,7 @@ jobs: matrix: container: - 'ubuntu-20.04' + - 'alpine-3.17' steps: - name: Checkout diff --git a/alpine-3.17.Dockerfile b/alpine-3.17.Dockerfile new file mode 100644 index 0000000..e2f082b --- /dev/null +++ b/alpine-3.17.Dockerfile @@ -0,0 +1,65 @@ +# Copyright (c) 2024 [Ribose Inc](https://www.ribose.com). +# All rights reserved. +# This file is a part of tamatebako +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +FROM alpine:3.17 + +ENV TZ=Etc/UTC +ENV ARCH=x64 + +RUN apk --no-cache --upgrade add build-base cmake git bash sudo \ + autoconf boost-static boost-dev flex-dev bison make clang \ + binutils-dev libevent-dev acl-dev sed python3 pkgconfig curl \ + lz4-dev openssl-dev zlib-dev xz ninja zip unzip tar xz-dev \ + libunwind-dev libdwarf-dev gflags-dev elfutils-dev gcompat \ + libevent-static openssl-libs-static lz4-static libffi-dev \ + zlib-static libunwind-static acl-static fmt-dev xz-static \ + gdbm-dev yaml-dev yaml-static ncurses-dev ncurses-static \ + readline-dev readline-static p7zip ruby-dev jemalloc-dev \ + gettext-dev gperf brotli-dev brotli-static clang libxslt-dev \ + libxslt-static + +ENV CC=clang +ENV CXX=clang++ + +RUN gem install tebako + +ENV HOME=/home/tebako +RUN adduser --disabled-password --gecos "" --home $HOME tebako && \ + printf "\ntebako\tALL=(ALL)\tNOPASSWD:\tALL" > /etc/sudoers.d/tebako + +COPY test $HOME/test +USER tebako +WORKDIR $HOME + +# Create packaging environment for Ruby 3.1.5, 3.2.4 +# Test and "warm up" since initialization is fully finished after the first packaging +RUN tebako setup -p .tebako -R 3.1.5 && \ + tebako setup -p .tebako -R 3.2.4 && \ + tebako press -p .tebako -R 3.1.5 -r test -e tebako-test-run.rb -o ruby-3.1.5-package && \ + tebako press -p .tebako -R 3.2.4 -r test -e tebako-test-run.rb -o ruby-3.2.4-package && \ + rm ruby-*-package + +ENV PS1=PS1="\[\]\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\]" +CMD ["bash"]