From 9ac80fbe229ee6e6434d6b2a12f6dcbac4147d18 Mon Sep 17 00:00:00 2001 From: mo khan Date: Thu, 25 Jun 2020 10:05:20 -0600 Subject: Prepare separate projects for each tool-version --- .gitlab-ci.yml | 119 +++------------------------------- .gitlab/build.yml | 74 +++++++++++++++++++++ Dockerfile | 34 ---------- bin/omnibus-build | 7 ++ bin/omnibus-setup | 36 ++++++++++ config/projects/asdf.rb | 10 +++ config/projects/mono.rb | 19 ++---- config/projects/python.rb | 14 ++++ config/projects/pythons.rb | 22 ------- config/projects/rubies.rb | 22 ------- config/projects/ruby.rb | 15 +++++ config/software/asdf-python-plugin.rb | 13 ---- config/software/asdf-ruby-plugin.rb | 13 ---- config/software/asdf-ruby.rb | 10 ++- config/software/asdf-zlib.rb | 55 ---------------- config/software/asdf.rb | 34 ++++++++++ config/software/preparation.rb | 22 ++----- omnibus.rb | 14 ++-- package-scripts/asdf/postinst | 17 ----- package-scripts/asdf/postrm | 9 --- package-scripts/asdf/preinst | 7 -- package-scripts/asdf/prerm | 15 ----- 22 files changed, 224 insertions(+), 357 deletions(-) create mode 100644 .gitlab/build.yml delete mode 100644 Dockerfile create mode 100755 bin/omnibus-build create mode 100755 bin/omnibus-setup create mode 100644 config/projects/asdf.rb create mode 100644 config/projects/python.rb delete mode 100644 config/projects/pythons.rb delete mode 100644 config/projects/rubies.rb create mode 100644 config/projects/ruby.rb delete mode 100644 config/software/asdf-python-plugin.rb delete mode 100644 config/software/asdf-ruby-plugin.rb delete mode 100644 config/software/asdf-zlib.rb create mode 100644 config/software/asdf.rb delete mode 100755 package-scripts/asdf/postinst delete mode 100755 package-scripts/asdf/postrm delete mode 100755 package-scripts/asdf/preinst delete mode 100755 package-scripts/asdf/prerm diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 248ab9a..d398230 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,121 +1,20 @@ -stages: - - build - - release - -cache: - key: ${CI_JOB_NAME} - paths: - - local - variables: - DOCKER_DRIVER: overlay2 GIT_DEPTH: "1" GIT_STRATEGY: fetch - TMP_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA default: - image: $TMP_IMAGE + image: debian:stable-slim artifacts: paths: - pkg/ expire_in: 1 week - -build-docker-image: - image: docker:stable - stage: build - services: - - docker:stable-dind script: - - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - - docker build -t $TMP_IMAGE . - - docker push $TMP_IMAGE - -.ruby: - stage: release - script: - - bundle exec omnibus build rubies - variables: - RUBY_VERSION: '2.7.1' - -ruby-2-7-1: - extends: .ruby - variables: - RUBY_VERSION: '2.7.1' - -ruby-2-7-0: - extends: .ruby - variables: - RUBY_VERSION: '2.7.0' - -ruby-2-6-6: - extends: .ruby - variables: - RUBY_VERSION: '2.6.6' - -ruby-2-6-5: - extends: .ruby - variables: - RUBY_VERSION: '2.6.5' - -ruby-2-6-4: - extends: .ruby - variables: - RUBY_VERSION: '2.6.4' - -ruby-2-6-3: - extends: .ruby - variables: - RUBY_VERSION: '2.6.3' - -ruby-2-6-2: - extends: .ruby - variables: - RUBY_VERSION: '2.6.2' - -ruby-2-6-1: - extends: .ruby - variables: - RUBY_VERSION: '2.6.1' - -ruby-2-6-0: - extends: .ruby - variables: - RUBY_VERSION: '2.6.0' - -ruby-2-5-8: - extends: .ruby - variables: - RUBY_VERSION: '2.5.8' - -ruby-2-4-5: - extends: .ruby - variables: - RUBY_VERSION: '2.4.5' - -ruby-2-4-10: - extends: .ruby - variables: - RUBY_VERSION: '2.4.10' - -.mono: - stage: release - script: - - bundle exec omnibus build mono - -mono-6-8-0-123: - extends: .mono - variables: - MONO_VERSION: '6.8.0.123' - -.python: - stage: release - allow_failure: true - script: - - bundle exec omnibus build pythons - variables: - PYTHON_VERSION: '3.8.3' + - bin/omnibus-setup + - bin/omnibus-build $OMNIBUS_PROJECT + cache: + key: ${CI_JOB_NAME} + paths: + - tmp/omnibus -python-3-8-3: - extends: .python - variables: - PYTHON_VERSION: '3.8.3' +include: + - local: .gitlab/build.yml diff --git a/.gitlab/build.yml b/.gitlab/build.yml new file mode 100644 index 0000000..7cf0ba8 --- /dev/null +++ b/.gitlab/build.yml @@ -0,0 +1,74 @@ +asdf: + variables: + OMNIBUS_PROJECT: asdf + +ruby-2-7-1: + variables: + OMNIBUS_PROJECT: ruby + RUBY_VERSION: '2.7.1' + +ruby-2-7-0: + variables: + OMNIBUS_PROJECT: ruby + RUBY_VERSION: '2.7.0' + +ruby-2-6-6: + variables: + OMNIBUS_PROJECT: ruby + RUBY_VERSION: '2.6.6' + +ruby-2-6-5: + variables: + OMNIBUS_PROJECT: ruby + RUBY_VERSION: '2.6.5' + +ruby-2-6-4: + variables: + OMNIBUS_PROJECT: ruby + RUBY_VERSION: '2.6.4' + +ruby-2-6-3: + variables: + OMNIBUS_PROJECT: ruby + RUBY_VERSION: '2.6.3' + +ruby-2-6-2: + variables: + OMNIBUS_PROJECT: ruby + RUBY_VERSION: '2.6.2' + +ruby-2-6-1: + variables: + OMNIBUS_PROJECT: ruby + RUBY_VERSION: '2.6.1' + +ruby-2-6-0: + variables: + OMNIBUS_PROJECT: ruby + RUBY_VERSION: '2.6.0' + +ruby-2-5-8: + variables: + OMNIBUS_PROJECT: ruby + RUBY_VERSION: '2.5.8' + +ruby-2-4-5: + variables: + OMNIBUS_PROJECT: ruby + RUBY_VERSION: '2.4.5' + +ruby-2-4-10: + variables: + OMNIBUS_PROJECT: ruby + RUBY_VERSION: '2.4.10' + +mono-6-8-0-123: + variables: + OMNIBUS_PROJECT: mono + MONO_VERSION: '6.8.0.123' + +python-3-8-3: + allow_failure: true + variables: + OMNIBUS_PROJECT: python + PYTHON_VERSION: '3.8.3' diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 0ffe646..0000000 --- a/Dockerfile +++ /dev/null @@ -1,34 +0,0 @@ -FROM debian:stable-slim -COPY Gemfile* /root/omnibus/ -WORKDIR /root/omnibus -RUN apt-get update -q \ - && apt-get install -y --no-install-recommends \ - autoconf \ - automake \ - bison \ - build-essential \ - ca-certificates \ - cmake \ - curl \ - fakeroot \ - gettext \ - git \ - git \ - libdb-dev \ - libffi-dev \ - libgdbm-dev \ - libgdbm6 \ - libncurses5-dev \ - libreadline6-dev \ - libssl-dev \ - libtool \ - libtool-bin \ - libyaml-dev \ - python3 \ - ruby \ - ruby-dev \ - zlib1g-dev \ - && ln -s /usr/bin/python3 /usr/bin/python \ - && gem install bundler \ - && bundle install \ - && echo 'done' diff --git a/bin/omnibus-build b/bin/omnibus-build new file mode 100755 index 0000000..cf3919b --- /dev/null +++ b/bin/omnibus-build @@ -0,0 +1,7 @@ +#!/bin/sh + +set -e + +cd "$(dirname "$0")/.." + +bundle exec omnibus build -l debug "$@" diff --git a/bin/omnibus-setup b/bin/omnibus-setup new file mode 100755 index 0000000..21a3614 --- /dev/null +++ b/bin/omnibus-setup @@ -0,0 +1,36 @@ +#!/bin/sh + +set -e + +cd "$(dirname "$0")/.." + +apt-get update -q +apt-get install -y --no-install-recommends \ + autoconf \ + automake \ + bison \ + build-essential \ + ca-certificates \ + cmake \ + curl \ + fakeroot \ + gettext \ + git \ + git \ + libdb-dev \ + libffi-dev \ + libgdbm-dev \ + libgdbm6 \ + libncurses5-dev \ + libreadline6-dev \ + libssl-dev \ + libtool \ + libtool-bin \ + libyaml-dev \ + python3 \ + ruby \ + ruby-dev \ + zlib1g-dev +ln -s /usr/bin/python3 /usr/bin/python +gem install bundler +bundle install diff --git a/config/projects/asdf.rb b/config/projects/asdf.rb new file mode 100644 index 0000000..8b9e9f5 --- /dev/null +++ b/config/projects/asdf.rb @@ -0,0 +1,10 @@ +name "asdf" +maintainer "https://github.com/asdf-vm/asdf#contributing" +homepage "https://github.com/asdf-vm/asdf" + +install_dir "/opt/asdf" + +build_version '0.7.8' +build_iteration 1 + +dependency "asdf" diff --git a/config/projects/mono.rb b/config/projects/mono.rb index 28fe66f..01fc85b 100644 --- a/config/projects/mono.rb +++ b/config/projects/mono.rb @@ -1,21 +1,14 @@ -name "mono" +mono_version = ENV.fetch('MONO_VERSION', '6.8.0.123') + +name "mono-#{mono_version}" maintainer "mkhan@gitlab.com" homepage "https://gitlab.com/xlgmokha/omnibus-asdf" -# Defaults to C:/asdf on Windows -# and /opt/asdf on all other platforms -install_dir "/opt/asdf" +install_dir "/opt/asdf/installs/mono/#{mono_version}" -build_version ENV['MONO_VERSION'] +build_version mono_version build_iteration 1 -# Creates required build directories dependency "preparation" -override 'asdf-mono', version: ENV['MONO_VERSION'] +override 'asdf-mono', version: mono_version dependency "asdf-mono" - -# asdf dependencies/components -# dependency "somedep" - -#exclude "**/.git" -#exclude "**/bundler/git" diff --git a/config/projects/python.rb b/config/projects/python.rb new file mode 100644 index 0000000..c539e1d --- /dev/null +++ b/config/projects/python.rb @@ -0,0 +1,14 @@ +python_version = ENV.fetch('PYTHON_VERSION', '3.8.3') + +name "python-#{python_version}" +maintainer "mkhan@gitlab.com" +homepage "https://gitlab.com/xlgmokha/omnibus-asdf" + +install_dir "/opt/asdf/installs/python/#{python_version}" + +build_version python_version +build_iteration 1 + +dependency "preparation" +override 'asdf-python', version: python_version +dependency "asdf-python" diff --git a/config/projects/pythons.rb b/config/projects/pythons.rb deleted file mode 100644 index 54493d0..0000000 --- a/config/projects/pythons.rb +++ /dev/null @@ -1,22 +0,0 @@ -name "pythons" -maintainer "mkhan@gitlab.com" -homepage "https://gitlab.com/xlgmokha/omnibus-asdf" - -# Defaults to C:/asdf on Windows -# and /opt/asdf on all other platforms -install_dir "/opt/asdf" - -build_version ENV.fetch('PYTHON_VERSION', '0.1.0') -build_iteration 1 - -# Creates required build directories -dependency "preparation" -dependency "asdf-python-plugin" -override('asdf-python', version: ENV['PYTHON_VERSION']) if ENV['PYTHON_VERSION'] -dependency "asdf-python" - -# asdf dependencies/components -# dependency "somedep" - -#exclude "**/.git" -#exclude "**/bundler/git" diff --git a/config/projects/rubies.rb b/config/projects/rubies.rb deleted file mode 100644 index 8c39571..0000000 --- a/config/projects/rubies.rb +++ /dev/null @@ -1,22 +0,0 @@ -name "rubies" -maintainer "mkhan@gitlab.com" -homepage "https://gitlab.com/xlgmokha/omnibus-asdf" - -# Defaults to C:/asdf on Windows -# and /opt/asdf on all other platforms -install_dir "/opt/asdf" - -build_version ENV['RUBY_VERSION'] -build_iteration 1 - -# Creates required build directories -dependency "preparation" -dependency "asdf-ruby-plugin" -override 'asdf-ruby', version: ENV['RUBY_VERSION'] -dependency "asdf-ruby" - -# asdf dependencies/components -# dependency "somedep" - -#exclude "**/.git" -#exclude "**/bundler/git" diff --git a/config/projects/ruby.rb b/config/projects/ruby.rb new file mode 100644 index 0000000..d424569 --- /dev/null +++ b/config/projects/ruby.rb @@ -0,0 +1,15 @@ +ruby_version = ENV.fetch('RUBY_VERSION', '2.7.1') + +name "ruby-#{ruby_version}" +maintainer "mkhan@gitlab.com" +homepage "https://gitlab.com/xlgmokha/omnibus-asdf" + +install_dir "/opt/asdf/installs/ruby/#{ruby_version}" + +build_version ruby_version +build_iteration 1 + +dependency "preparation" +override 'asdf_ruby', version: ruby_version +dependency "asdf_ruby" + diff --git a/config/software/asdf-python-plugin.rb b/config/software/asdf-python-plugin.rb deleted file mode 100644 index 5509752..0000000 --- a/config/software/asdf-python-plugin.rb +++ /dev/null @@ -1,13 +0,0 @@ -name "asdf-python-plugin" -description "Python plugin for asdf version manager" -source git: "https://github.com/danhper/asdf-python.git" -relative_path "python" - -license_file "#{project_dir}/LICENSE" -#skip_transitive_dependency_licensing true - -build do - block do - sync project_dir, "#{install_dir}/plugins/python" - end -end diff --git a/config/software/asdf-ruby-plugin.rb b/config/software/asdf-ruby-plugin.rb deleted file mode 100644 index 5340d3b..0000000 --- a/config/software/asdf-ruby-plugin.rb +++ /dev/null @@ -1,13 +0,0 @@ -name "asdf-ruby-plugin" -description "Ruby plugin for asdf version manager" -source git: "https://github.com/asdf-vm/asdf-ruby.git" -relative_path "ruby" - -license_file "#{project_dir}/LICENSE" -#skip_transitive_dependency_licensing true - -build do - block do - sync project_dir, "#{install_dir}/plugins/ruby" - end -end diff --git a/config/software/asdf-ruby.rb b/config/software/asdf-ruby.rb index 106e407..9cfa6b5 100644 --- a/config/software/asdf-ruby.rb +++ b/config/software/asdf-ruby.rb @@ -1,4 +1,4 @@ -name "asdf-ruby" +name "asdf_ruby" license "BSD-2-Clause" license_file "BSDL" @@ -27,6 +27,7 @@ version("2.6.0") { source sha256: "f3c35b924a11c88ff111f0956ded3cdc12c90c04b72b2 version("2.5.8") { source sha256: "6c0bdf07876c69811a9e7dc237c43d40b1cb6369f68e0e17953d7279b524ad9a" } version("2.4.10") { source sha256: "93d06711795bfb76dbe7e765e82cdff3ddf9d82eff2a1f24dead9bb506eaf2d0" } +version("2.4.9") { source sha256: "f99b6b5e3aa53d579a49eb719dd0d3834d59124159a6d4351d1e039156b1c6ae" } version("2.4.5") { source sha256: "6737741ae6ffa61174c8a3dcdd8ba92bc38827827ab1d7ea1ec78bc3cefc5198" } source url: "https://cache.ruby-lang.org/pub/ruby/#{version.match(/^(\d+\.\d+)/)[0]}/ruby-#{version}.tar.gz" @@ -42,14 +43,17 @@ build do "--disable-install-rdoc", "--disable-jit-support", "--enable-shared", - "--prefix=#{install_dir}/installs/ruby/#{version}", + "--prefix=#{install_dir}", "--with-out-ext=dbm,readline", "--without-gdbm", "--without-gmp", "--without-valgrind", - "--without-tk", + "--without-tk" ] configure(*configure_command, env: env) make "-j #{workers}", env: env make "-j #{workers} install", env: env + command "#{install_dir}/bin/gem update --system" + command "#{install_dir}/bin/gem install bundler -v '~>1.7' --no-document" + command "#{install_dir}/bin/gem install bundler -v '~>2.0' --no-document" end diff --git a/config/software/asdf-zlib.rb b/config/software/asdf-zlib.rb deleted file mode 100644 index 9e40776..0000000 --- a/config/software/asdf-zlib.rb +++ /dev/null @@ -1,55 +0,0 @@ -# -# Copyright 2020 YOUR NAME -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# These options are required for all software definitions -name "asdf-zlib" -default_version "1.2.6" - -# A software can specify more than one version that is available for install -version("1.2.6") { source md5: "618e944d7c7cd6521551e30b32322f4a" } -version("1.2.8") { source md5: "44d667c142d7cda120332623eab69f40" } - -# Sources may be URLs, git locations, or path locations -source url: "http://downloads.sourceforge.net/project/libpng/zlib/#{version}/zlib-#{version}.tar.gz" - -# This is the path, inside the tarball, where the source resides -relative_path "zlib-#{version}" - -build do - # Setup a default environment from Omnibus - you should use this Omnibus - # helper everywhere. It will become the default in the future. - env = with_standard_compiler_flags(with_embedded_path) - - # Manipulate any configure flags you wish: - # For some reason zlib needs this flag on solaris - env["CFLAGS"] << " -DNO_VIZ" if solaris? - - # "command" is part of the build DSL. There are a number of handy options - # available, such as "copy", "sync", "ruby", etc. For a complete list, please - # consult the Omnibus gem documentation. - # - # "install_dir" is exposed and refers to the top-level projects +install_dir+ - command "./configure" \ - " --prefix=#{install_dir}/embedded", env: env - - # You can have multiple steps - they are executed in the order in which they - # are read. - # - # "workers" is a DSL method that returns the most suitable number of - # builders for the currently running system. - command "make -j #{workers}", env: env - command "make -j #{workers} install", env: env -end diff --git a/config/software/asdf.rb b/config/software/asdf.rb new file mode 100644 index 0000000..a4d331e --- /dev/null +++ b/config/software/asdf.rb @@ -0,0 +1,34 @@ +name "asdf" +default_version "0.7.8" +relative_path "asdf-#{version}" + +license "MIT" +# license_file "#{project_dir}/LICENSE" + +skip_transitive_dependency_licensing true + +version("0.7.8") { source md5: "c64fe16441d639669a6bf56a860e0eb4" } + +source url: "https://github.com/asdf-vm/asdf/archive/v#{version}.tar.gz" + +build do + block do + sync project_dir, install_dir + command "echo 'legacy_version_file = yes' > #{install_dir}/defaults" + touch "#{install_dir}/installs/.keep" + touch "#{install_dir}/plugins/.keep" + + env = { 'ASDF_DATA_DIR' => install_dir } + command "#{install_dir}/bin/asdf plugin-add elixir", env: env + command "#{install_dir}/bin/asdf plugin-add golang", env: env + command "#{install_dir}/bin/asdf plugin-add gradle", env: env + command "#{install_dir}/bin/asdf plugin-add java", env: env + command "#{install_dir}/bin/asdf plugin-add maven", env: env + command "#{install_dir}/bin/asdf plugin-add nodejs", env: env + command "#{install_dir}/bin/asdf plugin-add php", env: env + command "#{install_dir}/bin/asdf plugin-add python", env: env + command "#{install_dir}/bin/asdf plugin-add ruby", env: env + command "#{install_dir}/bin/asdf plugin-add rust", env: env + command "#{install_dir}/bin/asdf plugin-add sbt", env: env + end +end diff --git a/config/software/preparation.rb b/config/software/preparation.rb index 231cd5a..c49fdb1 100644 --- a/config/software/preparation.rb +++ b/config/software/preparation.rb @@ -1,25 +1,13 @@ name "preparation" description "the steps required to prepare the build" -default_version "v0.7.8" -relative_path "asdf-#{version[1..-1]}" +default_version "1.0.0" -license_file "#{project_dir}/LICENSE" -#skip_transitive_dependency_licensing true - -version("v0.7.8") { source md5: "c64fe16441d639669a6bf56a860e0eb4" } - -source url: "https://github.com/asdf-vm/asdf/archive/#{version}.tar.gz" +license :project_license +skip_transitive_dependency_licensing true build do block do - sync "#{project_dir}/bin", "#{install_dir}/bin" - sync "#{project_dir}/lib", "#{install_dir}/lib" - copy "#{project_dir}/LICENSE", "#{install_dir}/LICENSE" - command "echo 'legacy_version_file = yes' > #{install_dir}/defaults" - touch "#{install_dir}/installs/.keep" - touch "#{install_dir}/plugins/.keep" - #touch "#{install_dir}/embedded/lib/.gitkeep" - #touch "#{install_dir}/embedded/bin/.gitkeep" - #touch "#{install_dir}/bin/.gitkeep" + touch "#{install_dir}/embedded/lib/.keep" + touch "#{install_dir}/embedded/bin/.keep" end end diff --git a/omnibus.rb b/omnibus.rb index 7cf8d0e..27ff8d3 100644 --- a/omnibus.rb +++ b/omnibus.rb @@ -13,16 +13,16 @@ # # Uncomment this line to change the default base directory to "local" # ------------------------------------------------------------------- -base_dir './local' +base_dir './tmp' # # Alternatively you can tune the individual values # ------------------------------------------------ -cache_dir './local/omnibus/cache' -git_cache_dir './local/omnibus/cache/git_cache' -source_dir './local/omnibus/src' -build_dir './local/omnibus/build' -package_dir './local/omnibus/pkg' -package_tmp './local/omnibus/pkg-tmp' +cache_dir './tmp/omnibus/cache' +git_cache_dir './tmp/omnibus/cache/git_cache' +source_dir './tmp/omnibus/src' +build_dir './tmp/omnibus/build' +package_dir './tmp/omnibus/pkg' +package_tmp './tmp/omnibus/pkg-tmp' append_timestamp false # Disable git caching diff --git a/package-scripts/asdf/postinst b/package-scripts/asdf/postinst deleted file mode 100755 index 39d84e8..0000000 --- a/package-scripts/asdf/postinst +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -# -# Perform necessary asdf setup steps -# after package is installed. -# - -PROGNAME=`basename $0` - -error_exit() -{ - echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2 - exit 1 -} - -echo "Thank you for installing asdf!" - -exit 0 diff --git a/package-scripts/asdf/postrm b/package-scripts/asdf/postrm deleted file mode 100755 index 560c896..0000000 --- a/package-scripts/asdf/postrm +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -# -# Perform necessary asdf removal steps -# after package is uninstalled. -# - -echo "asdf has been uninstalled!" - -exit 0 diff --git a/package-scripts/asdf/preinst b/package-scripts/asdf/preinst deleted file mode 100755 index 89d3cf0..0000000 --- a/package-scripts/asdf/preinst +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# -# Perform necessary asdf setup steps -# before package is installed. -# - -echo "You're about to install asdf!" diff --git a/package-scripts/asdf/prerm b/package-scripts/asdf/prerm deleted file mode 100755 index 46749a1..0000000 --- a/package-scripts/asdf/prerm +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -# -# Perform necessary asdf setup steps -# prior to installing package. -# - -PROGNAME=`basename $0` - -error_exit() -{ - echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2 - exit 1 -} - -exit 0 -- cgit v1.2.3