diff --git a/.zshrc b/.zshrc index 1d86132..eb7eaed 100644 --- a/.zshrc +++ b/.zshrc @@ -12,7 +12,7 @@ export VISUAL='code --wait' export TERM=xterm-256color export XDG_CONFIG_HOME=$HOME/.config export ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=("${(@)ZSH_AUTOSUGGEST_ACCEPT_WIDGETS:#forward-char}") -export PATH="/home/app/hetzner-k3s/bin:$HOME/.krew/bin:./bin:$HOME/bin:$GOPATH/bin:$PATH" +export PATH="/home/app/hetzner-k3s/bin:$HOME/.krew/bin:./bin:$HOME/bin:$GOPATH/bin:/bundle/bin:$PATH" export HISTFILE="/home/app/hetzner-k3s/.zsh_history" source $ZSH/oh-my-zsh.sh diff --git a/Dockerfile.dev b/Dockerfile.dev index 2141e82..3c40e12 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,11 +1,12 @@ -FROM alpine:3.19.1 +# syntax=docker/dockerfile:1.4 -RUN apk update \ - && apk add --update --no-cache gcc gmp-dev libevent-static musl-dev pcre-dev pcre2-dev libxml2-dev \ - libxml2-static openssl-dev openssl-libs-static tzdata yaml-static zlib-static xz-static \ - make git autoconf automake libtool patch libssh2-static libssh2-dev crystal shards \ - curl docker zsh bash openssl k9s shadow go \ - gcc g++ libc-dev libxml2-dev openssl-dev yaml-dev zlib-dev crystal openssh-client +FROM jruby:9.4.6.0-jre8 + +RUN --mount=type=cache,id=dev-apt-cache,sharing=locked,target=/tmp/cache/apt-cache \ + --mount=type=cache,id=dev-apt-lib,sharing=locked,target=/tmp/cache/apt-lib \ + apt-get update -qq \ + && DEBIAN_FRONTEND=noninteractive apt-get install -yq build-essential git-core wget ripgrep zsh gnupg2 curl ca-certificates apt-transport-https \ + && rm -rf /var/lib/apt/lists/* RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/')/kubectl" && chmod +x ./kubectl && mv ./kubectl /usr/local/bin/kubectl @@ -24,11 +25,23 @@ RUN set -x; cd "$(mktemp -d)" \ RUN curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash -ENV GOPATH=/root/go +ENV GEM_HOME="/bundle" \ + GEM_PATH="/bundle" \ + APP_PATH="/home/app/hetzner-k3s" \ + BUNDLE_PATH="/bundle" \ + BUNDLE_APP_CONFIG="/bundle" \ + BUNDLE_SILENCE_ROOT_WARNING=1 \ + LANG=C.UTF-8 LC_ALL=C.UTF-8 \ + GOPATH=/root/go RUN mkdir -p $GOPATH/bin -RUN go install github.com/stern/stern@latest +RUN wget https://go.dev/dl/go1.21.0.linux-$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/').tar.gz \ + && tar -xvf go1.21.0.linux-$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/').tar.gz \ + && rm -rf /usr/local/go \ + && mv go /usr/local \ + && rm -rf go1.21.0.linux-$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/').tar.gz \ + && /usr/local/go/bin/go install github.com/stern/stern@latest SHELL ["/bin/zsh", "-c"] diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..d2403f1 --- /dev/null +++ b/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +# gem "rails" diff --git a/config/warble.rb b/config/warble.rb new file mode 100644 index 0000000..bf306d6 --- /dev/null +++ b/config/warble.rb @@ -0,0 +1,182 @@ +# Disable Rake-environment-task framework detection by uncommenting/setting to false +# Warbler.framework_detection = false + +# Warbler web application assembly configuration file +Warbler::Config.new do |config| + # Features: additional options controlling how the jar is built. + # Currently the following features are supported: + # - *gemjar*: package the gem repository in a jar file in WEB-INF/lib + # - *executable*: embed a web server and make the war executable + # - *runnable*: allows to run bin scripts e.g. `java -jar my.war -S rake -T` + # - *compiled*: compile .rb files to .class files + config.features = %w(runnable) + + # Application directories to be included in the webapp. + config.dirs = %w(bin lib) + + # Additional files/directories to include, above those in config.dirs + # config.includes = FileList["db"] + + # Additional files/directories to exclude + # config.excludes = FileList["lib/tasks/*"] + + # Additional Java .jar files to include. Note that if .jar files are placed + # in lib (and not otherwise excluded) then they need not be mentioned here. + # JRuby and JRuby-Rack are pre-loaded in this list. Be sure to include your + # own versions if you directly set the value + # config.java_libs += FileList["lib/java/*.jar"] + + # Loose Java classes and miscellaneous files to be included. + # config.java_classes = FileList["target/classes/**.*"] + + # One or more pathmaps defining how the java classes should be copied into + # the archive. The example pathmap below accompanies the java_classes + # configuration above. See http://rake.rubyforge.org/classes/String.html#M000017 + # for details of how to specify a pathmap. + # config.pathmaps.java_classes << "%{target/classes/,}p" + + # Bundler support is built-in. If Warbler finds a Gemfile in the + # project directory, it will be used to collect the gems to bundle + # in your application. If you wish to explicitly disable this + # functionality, uncomment here. + config.bundler = true + + # An array of Bundler groups to avoid including in the war file. + # Defaults to ["development", "test", "assets"]. + # config.bundle_without = [] + + # Other gems to be included. If you don't use Bundler or a gemspec + # file, you need to tell Warbler which gems your application needs + # so that they can be packaged in the archive. + # For Rails applications, the Rails gems are included by default + # unless the vendor/rails directory is present. + # config.gems += ["activerecord-jdbcmysql-adapter", "jruby-openssl"] + # config.gems << "tzinfo" + + # Uncomment this if you don't want to package rails gem. + # config.gems -= ["rails"] + + # The most recent versions of gems are used. + # You can specify versions of gems by using a hash assignment: + # config.gems["rails"] = "4.2.5" + + # You can also use regexps or Gem::Dependency objects for flexibility or + # finer-grained control. + # config.gems << /^sinatra-/ + # config.gems << Gem::Dependency.new("sinatra", "= 1.4.7") + + # Include gem dependencies not mentioned specifically. Default is + # true, uncomment to turn off. + # config.gem_dependencies = false + + # Array of regular expressions matching relative paths in gems to be + # excluded from the war. Defaults to empty, but you can set it like + # below, which excludes test files. + # config.gem_excludes = [/^(test|spec)\//] + + # Pathmaps for controlling how application files are copied into the archive + # config.pathmaps.application = ["WEB-INF/%p"] + + # Name of the archive (without the extension). Defaults to the basename + # of the project directory. + config.jar_name = "hetzner-k3s" + + # File extension for the archive. Defaults to either 'jar' or 'war'. + config.jar_extension = "jar" + + # Destionation for the created archive. Defaults to project's root directory. + # config.autodeploy_dir = "dist/" + + # Name of the MANIFEST.MF template for the war file. Defaults to a simple + # MANIFEST.MF that contains the version of Warbler used to create the war file. + # config.manifest_file = "config/MANIFEST.MF" + + # When using the 'compiled' feature and specified, only these Ruby + # files will be compiled. Default is to compile all \.rb files in + # the application. + # config.compiled_ruby_files = FileList['app/**/*.rb'] + + # Determines if ruby files in supporting gems will be compiled. + # Ignored unless compile feature is used. + # config.compile_gems = false + + # When set it specify the bytecode version for compiled class files + # config.bytecode_version = "1.6" + + # When set to true, Warbler will override the value of ENV['GEM_HOME'] even it + # has already been set. When set to false it will use any existing value of + # GEM_HOME if it is set. + # config.override_gem_home = true + + # Allows for specifing custom executables + # config.executable = ["rake", "bin/rake"] + + # Sets default (prefixed) parameters for the executables + # config.executable_params = "do:something" + + # If set to true, moves jar files into WEB-INF/lib. Prior to version 1.4.2 of Warbler this was done + # by default. But since 1.4.2 this config defaults to false. It may need to be set to true for + # web servers that do not explode the WAR file. + # Alternatively, this option can be set to a regular expression, which will + # act as a jar selector -- only jar files that match the pattern will be + # included in the archive. + # config.move_jars_to_webinf_lib = false + + # === War files only below here === + + # Embedded webserver to use with the 'executable' feature. Currently supported + # webservers are: + # - *jetty* - Embedded Jetty from Eclipse + # config.webserver = 'jetty' + + # Path to the pre-bundled gem directory inside the war file. Default + # is 'WEB-INF/gems'. Specify path if gems are already bundled + # before running Warbler. This also sets 'gem.path' inside web.xml. + # config.gem_path = "WEB-INF/vendor/bundler_gems" + + # Files for WEB-INF directory (next to web.xml). This contains + # web.xml by default. If there is an .erb-File it will be processed + # with webxml-config. You may want to exclude this file via + # config.excludes. + # config.webinf_files += FileList["jboss-web.xml"] + + # Files to be included in the root of the webapp. Note that files in public + # will have the leading 'public/' part of the path stripped during staging. + # config.public_html = FileList["public/**/*", "doc/**/*"] + + # Pathmaps for controlling how public HTML files are copied into the .war + # config.pathmaps.public_html = ["%{public/,}p"] + + # Value of RAILS_ENV for the webapp -- default as shown below + # config.webxml.rails.env = ENV['RAILS_ENV'] || 'production' + + # Public ROOT mapping, by default assets are copied into .war ROOT directory. + # config.public.root = '' + + # Application booter to use, either :rack or :rails (autodetected by default) + # config.webxml.booter = :rails + + # When using the :rack booter, "Rackup" script to use. + # - For 'rackup.path', the value points to the location of the rackup + # script in the web archive file. You need to make sure this file + # gets included in the war, possibly by adding it to config.includes + # or config.webinf_files above. + # - For 'rackup', the rackup script you provide as an inline string + # is simply embedded in web.xml. + # The script is evaluated in a Rack::Builder to load the application. + # Examples: + # config.webxml.rackup.path = 'WEB-INF/hello.ru' + # config.webxml.rackup = %{require './lib/demo'; run Rack::Adapter::Camping.new(Demo)} + # config.webxml.rackup = require 'cgi' && CGI::escapeHTML(File.read("config.ru")) + + # Control the pool of Rails runtimes. Leaving unspecified means + # the pool will grow as needed to service requests. It is recommended + # that you fix these values when running a production server! + # If you're using threadsafe! mode, you probably don't want to set these values, + # since 1 runtime(default for threadsafe mode) will be enough. + # config.webxml.jruby.min.runtimes = 2 + # config.webxml.jruby.max.runtimes = 4 + + # JNDI data source name + # config.webxml.jndi = 'jdbc/rails' +end diff --git a/docker-compose.yml b/docker-compose.yml index 5333415..51f20e8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,6 +3,7 @@ version: '3.8' volumes: kube: vscode_cache: + bundle: services: hetzner-k3s: @@ -14,4 +15,5 @@ services: - ${HOME}/.ssh:/root/.ssh - /var/run/docker.sock:/var/run/docker.sock - kube:/root/.kube - - vscode_cache:/vscode/vscode-server:cache + - vscode_cache:/vscode/vscode-server + - bundle:/bundle