Skip to content

Commit

Permalink
Set up JRuby dev environment
Browse files Browse the repository at this point in the history
  • Loading branch information
vitobotta committed Apr 13, 2024
1 parent da3b1f6 commit 700914e
Show file tree
Hide file tree
Showing 5 changed files with 213 additions and 11 deletions.
2 changes: 1 addition & 1 deletion .zshrc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
31 changes: 22 additions & 9 deletions Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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"]

Expand Down
5 changes: 5 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# frozen_string_literal: true

source "https://rubygems.org"

# gem "rails"
182 changes: 182 additions & 0 deletions config/warble.rb
Original file line number Diff line number Diff line change
@@ -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
4 changes: 3 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ version: '3.8'
volumes:
kube:
vscode_cache:
bundle:

services:
hetzner-k3s:
Expand All @@ -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

0 comments on commit 700914e

Please sign in to comment.