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/tools/tools.sh b/tools/tools.sh new file mode 100755 index 0000000..ac825fd --- /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} -- 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..be05664 --- /dev/null +++ b/ubuntu-20.04.Dockerfile @@ -0,0 +1,58 @@ +# 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 +RUN apt-get -y install sudo wget git make 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 + +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 + +RUN adduser --disabled-password --gecos "" tebako && \ + printf "\ntebako\tALL=(ALL)\tNOPASSWD:\tALL" > /etc/sudoers.d/tebako + +ENV HOME=/home/tebako +USER tebako + +RUN cd $HOME && tebako setup -p .tebako