diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aa90b4db56afa172185739401bcf5d1d25049953..ead83dfdf0b07ef83e1d76ceada6cc7e2cd79211 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -211,3 +211,19 @@ push-toolbx: needs: - job: build-toolbx artifacts: true + +# workbench image: + +build-workbench: + extends: .container-build + variables: + CONTEXT: workbench + +push-workbench: + extends: .container-push + variables: + CONTEXT: workbench + IMAGE: workbench + needs: + - job: build-workbench + artifacts: true diff --git a/workbench/.dockerignore b/workbench/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..857ef49f9feeb95d0a162b13367eb5c270a9e5ab --- /dev/null +++ b/workbench/.dockerignore @@ -0,0 +1,3 @@ +* +!bash_completion.d/* +!bin/* diff --git a/workbench/Dockerfile b/workbench/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..3f9e1ec957213cab3280448dbe6b7c52a1c28177 --- /dev/null +++ b/workbench/Dockerfile @@ -0,0 +1,294 @@ +# hadolint ignore=DL3007 +FROM registry.shore.co.il/toolbx:latest +SHELL ["/bin/bash", "-o", "pipefail", "-xc"] +# hadolint ignore=DL3008,DL3013,DL3016,DL3027,DL4001 +RUN apt-get update && \ + curl --location --silent --fail --show-error https://github.com/kubernetes/kompose/releases/download/v1.26.1/kompose_1.26.1_amd64.deb --output /tmp/kompose.deb && \ + curl --location --silent --fail --show-error https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb --output /tmp/session-manager-plugin.deb && \ + DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends \ + adb \ + apache2-utils \ + aspell-he \ + at \ + aws-vault \ + bash-completion \ + bats \ + bc \ + build-essential \ + bundler \ + bzr \ + ca-certificates \ + clickhouse-client \ + cmake \ + composer \ + consul \ + curl \ + dbus-x11 \ + default-jdk-headless \ + default-mysql-client \ + devscripts \ + direnv \ + dirmngr \ + dnsutils \ + docker.io \ + dos2unix \ + easy-rsa \ + entr \ + expect \ + flatpak \ + flatpak-builder \ + flatpak-xdg-utils \ + fuse3 \ + gdal-bin \ + gettext-base \ + gh \ + gir1.2-glib-2.0 \ + gir1.2-ostree-1.0 \ + git \ + gnupg \ + golang \ + gomplate \ + google-cloud-cli-skaffold \ + google-cloud-sdk \ + go-md2man \ + gpgv \ + helm \ + hugo \ + hunspell \ + hunspell-he \ + hyphen-en-us \ + ipcalc \ + iproute2 \ + iputils-ping \ + iputils-tracepath \ + jp \ + jq \ + keyutils \ + /tmp/kompose.deb \ + kops \ + krb5-config \ + kubectl \ + ldap-utils \ + less \ + libbz2-dev \ + libcairo2-dev \ + libcap2-bin \ + libdbus-1-dev \ + libgirepository1.0-dev \ + liblcms2-dev \ + libldap2-dev \ + liblzma-dev \ + libmariadb-dev \ + libncursesw5-dev \ + libnotify-bin \ + libpq-dev \ + libproj-dev \ + libprotobuf-dev \ + libreadline-dev \ + libsasl2-dev \ + libsecret-tools \ + libsqlite3-dev \ + libwebp-dev \ + libxml2-dev \ + libxmlsec1-dev \ + libyaml-dev \ + llvm \ + lsof \ + lz4 \ + man-db \ + mariadb-client \ + mat2 \ + mercurial \ + meson \ + minikube \ + mlocate \ + mongodb-database-tools \ + mythes-en-us \ + netcat-openbsd \ + nodejs \ + npm \ + ostree \ + packer \ + php-cli \ + podman \ + postgresql-client \ + protobuf-compiler \ + python3-dev \ + python3-pip \ + python3-venv \ + rclone \ + redis-tools \ + rename \ + reprepro \ + rsync \ + ruby-dev \ + /tmp/session-manager-plugin.deb \ + sharutils \ + shellcheck \ + signify-openbsd \ + skopeo \ + sops \ + subversion \ + sudo \ + swaks \ + systemd \ + task-english \ + task-hebrew \ + task-ssh-server \ + telnet \ + terraform \ + time \ + tk-dev \ + tmux \ + tnftp \ + transmission-cli \ + ttyrec \ + udftools \ + unzip \ + vagrant \ + vault \ + vcdimager \ + vim-nox \ + w3m-img \ + wget \ + whois \ + xdg-user-dirs \ + zip \ + && \ + sed -i 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/; s/# en_IL UTF-8/en_IL UTF-8/; s/# he_IL.UTF-8 UTF-8/he_IL.UTF-8 UTF-8/;' /etc/locale.gen && \ + locale-gen && \ + python3 -m pip install --use-deprecated=legacy-resolver --no-cache-dir \ + https://github.com/aws/aws-cli/archive/refs/heads/v2.zip \ + ansible \ + ansible-runner \ + awslogs \ + bcrypt \ + black \ + bump2version \ + colorama \ + boto \ + boto3 \ + chalice \ + check-manifest \ + cookiecutter \ + cryptography \ + dnspython \ + docker \ + elasticsearch-curator \ + elasticsearch[async] \ + fabric \ + flit \ + github3.py \ + Glances \ + gunicorn \ + hashin \ + httpbin \ + httpie \ + identify \ + importlab \ + invoke \ + iredis \ + khal \ + khard \ + litecli \ + magic-wormhole \ + mariadb \ + mycli \ + netaddr \ + paramiko \ + parse \ + passhole \ + passlib \ + pdm \ + pgcli \ + pipenv \ + pip-tools \ + poetry \ + pre-commit \ + protobuf \ + psycopg2 \ + pur \ + pygments \ + pymongo \ + PyMySQL \ + PyGObject \ + pyopenssl \ + 'python-gitlab[autocompletion,yaml]' \ + python-hcl2 \ + pyxdg \ + redis \ + remarshal \ + requests \ + rich-cli \ + sh \ + sqlite-utils \ + template \ + todoman \ + tox \ + transmission-rpc \ + ziglang \ + && \ + echo pdm-publish pdm-version | xargs -n1 pdm plugin add && \ + npm install --global \ + corepack \ + @playwright/test \ + && \ + export GOPATH=/usr/local/lib/go && \ + export PATH="$GOPATH/bin:$PATH" && \ + mkdir "$GOPATH" && \ + export GO111MODULE=on && \ + go install github.com/giantswarm/semver-bump@latest && \ + go install github.com/nishanths/license/v5@latest && \ + go install github.com/spelufo/on-change@latest && \ + go install github.com/kaorimatz/mysqldump-loader@v0.4.1 && \ + go install github.com/lucagrulla/cw@latest && \ + go install github.com/kvz/json2hcl@latest && \ + go install github.com/hashicorp/envconsul@latest && \ + go install sigs.k8s.io/kustomize/kustomize/v4@latest && \ + go install github.com/1player/host-spawn@latest && \ + wget https://raw.githubusercontent.com/rabbitmq/rabbitmq-server/v3.8.16/deps/rabbitmq_management/bin/rabbitmqadmin -qO /usr/local/bin/rabbitmqadmin && \ + chmod +x /usr/local/bin/rabbitmqadmin && \ + wget https://github.com/docker/compose/releases/download/v2.14.0/docker-compose-linux-x86_64 -qO /usr/local/bin/docker-compose && \ + chmod +x /usr/local/bin/docker-compose && \ + mkdir /usr/local/share/bfg && \ + wget 'https://search.maven.org/remote_content?g=com.madgag&a=bfg&v=LATEST' -qO /usr/local/share/bfg/bfg.jar && \ + curl --silent --location --fail --show-error "https://github.com/genuinetools/reg/releases/download/v0.16.1/reg-$(go env GOOS)-$(go env GOARCH)" --output /tmp/reg && \ + install -o root -g root -m 0755 /tmp/reg /usr/local/bin/reg && \ + curl --silent --location --fail --show-error "https://github.com/rancher/rke/releases/download/v1.3.8/rke_$(go env GOOS)-$(go env GOARCH)" --output /tmp/rke && \ + install -o root -g root -m 0755 /tmp/rke /usr/local/bin/rke && \ + curl --silent --location --fail --show-error https://github.com/SelfAdjointOperator/better-adb-sync/archive/refs/heads/master.tar.gz | tar -zxC /opt/ && \ + ln --symbolic /opt/better-adb-sync-master/src/adbsync.py /usr/local/bin/adbsynnc && \ + _PIPENV_COMPLETE=bash_source pipenv > /etc/bash_completion.d/pipenv && \ + rabbitmqadmin --bash-completion > /etc/bash_completion.d/rabbitmqadmin && \ + #poetry completions bash > /etc/bash_completion.d/poetry && \ + register-python-argcomplete gitlab > /etc/bash_completion.d/gitlab && \ + invoke --print-completion-script bash > /etc/bash_completion.d/invoke && \ + fab --print-completion-script bash > /etc/bash_completion.d/fabric && \ + helm completion bash > /etc/bash_completion.d/helm && \ + semver-bump completion bash > /etc/bash_completion.d/semver-bump && \ + pdm completion bash > /etc/bash_completion.d/pdm && \ + kompose completion bash > /etc/bash_completion.d/kompose && \ + skaffold completion bash > /etc/bash_completion.d/skaffold && \ + kustomize completion bash > /etc/bash_completion.d/kustomize && \ + wget https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose -qO /etc/bash_completion.d/docker-compose && \ + wget https://raw.githubusercontent.com/ansible-community/molecule/1.25.1/asset/bash_completion/molecule.bash-completion.sh -qO /etc/bash_completion.d/molecule && \ + wget https://github.com/mrolli/packer-bash-completion/raw/master/packer -qO /etc/bash_completion.d/packer && \ + wget https://raw.githubusercontent.com/dsifford/yarn-completion/v0.17.0/yarn-completion.bash -qO /etc/bash_completion.d/yarn && \ + #wget https://raw.githubusercontent.com/ziglang/shell-completions/master/_zig -qO /etc/bash_completion.d/zig && \ + git clone https://github.com/asdf-vm/asdf.git /opt/asdf && \ + ln --symbolic --target /etc/profile.d/ /opt/asdf/asdf.sh && \ + ln --symbolic /opt/asdf/completions/asdf.bash /etc/bash_completion.d/asdf && \ + mkdir -p /usr/local/share/ca-certificates && \ + wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem -qO - | \ + awk '/-----BEGIN[A-Z0-9 ]*CERTIFICATE-----/ {n++} n > 0 {print > ("/usr/local/share/ca-certificates/rds-" (1+n) ".crt")}' && \ + update-ca-certificates && \ + echo "export PATH=$GOPATH/bin:\$PATH" > /etc/profile.d/workbench.sh && \ + # pragma: allowlist nextline secret + rm /etc/ssh/ssh_host_* && \ + rm -rf /tmp/* /var/tmp/* /var/lib/apt/lists/* /var/cache/apt/archives/* ~/.cache/* +COPY --chown=root:root bash_completion.d/* /etc/bash_completion.d/ +COPY --chown=root:root bin/* /usr/local/bin/ +ENV PATH /usr/local/lib/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +ENV ASDF_DIR /opt/asdf +VOLUME /run/sshd +CMD ["/bin/bash"] diff --git a/workbench/README.md b/workbench/README.md new file mode 100644 index 0000000000000000000000000000000000000000..17398e90605e49c45e82f828a3a188c20c0dda2e --- /dev/null +++ b/workbench/README.md @@ -0,0 +1,24 @@ +# Workbench + +[](https://git.shore.co.il/shore/workbench/-/commits/master) + +A Docker image for a portable working environment, meant to be used with +[Toolbox](https://github.com/containers/toolbox). + +## Usage + +``` +toolbox create --registry registry.shore.co.il/workbench +toolbox enter workbench +``` + +## License + +This software is licensed under the MIT license (see `LICENSE.txt`). + +## Author Information + +Nimrod Adar, [contact me](mailto:nimrod@shore.co.il) or visit my +[website](https://www.shore.co.il/). Patches are welcome via +[`git send-email`](http://git-scm.com/book/en/v2/Git-Commands-Email). The repository +is located at: <https://git.shore.co.il/explore/>. diff --git a/workbench/bash_completion.d/aws b/workbench/bash_completion.d/aws new file mode 100644 index 0000000000000000000000000000000000000000..11567c59602a444e122d9f3b002933f0802c5610 --- /dev/null +++ b/workbench/bash_completion.d/aws @@ -0,0 +1,2 @@ +# vim: ft=bash +complete -C 'aws_completer' aws diff --git a/workbench/bash_completion.d/pre-commit b/workbench/bash_completion.d/pre-commit new file mode 100644 index 0000000000000000000000000000000000000000..efae4b430fd86d1726e47c4350e6005c90460e05 --- /dev/null +++ b/workbench/bash_completion.d/pre-commit @@ -0,0 +1,17 @@ +# vim: ft=bash + +_pre_commit () { + local cur prev words cword opts + _init_completion || return + opts='-h --help -V --version' + commands='autoupdate clean gc init-templatedir install install-hooks migrate-config run sample-config try-repo uninstall validate-config validate-manifest help hook-impl' + + if [[ $cur == -* ]] + then + COMPREPLY=($(compgen -W "$opts" -- "$cur")) + else + COMPREPLY=($(compgen -W "$commands" -- "$cur")) + fi +} + +complete -F _pre_commit pre-commit diff --git a/workbench/bash_completion.d/sops b/workbench/bash_completion.d/sops new file mode 100644 index 0000000000000000000000000000000000000000..95dfa202a5d5f5f2dcc78fe890d93c0f1014fef7 --- /dev/null +++ b/workbench/bash_completion.d/sops @@ -0,0 +1,16 @@ +_cli_bash_autocomplete() { + if [[ "${COMP_WORDS[0]}" != "source" ]]; then + local cur opts base + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + if [[ "$cur" == "-"* ]]; then + opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} ${cur} --generate-bash-completion ) + else + opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash-completion ) + fi + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 + fi +} + +complete -o bashdefault -o default -o nospace -F _cli_bash_autocomplete sops diff --git a/workbench/bash_completion.d/terraform b/workbench/bash_completion.d/terraform new file mode 100644 index 0000000000000000000000000000000000000000..377b0d3926190f08eaa431243cd042d0e9afeaa8 --- /dev/null +++ b/workbench/bash_completion.d/terraform @@ -0,0 +1,2 @@ +# vim: ft=bash +complete -C terraform terraform diff --git a/workbench/bash_completion.d/vault b/workbench/bash_completion.d/vault new file mode 100644 index 0000000000000000000000000000000000000000..105ea4ecea45f33ff36ba3d703fee31709b025a9 --- /dev/null +++ b/workbench/bash_completion.d/vault @@ -0,0 +1,2 @@ +# vim: ft=bash +complete -C vault vault diff --git a/workbench/bin/bfg b/workbench/bin/bfg new file mode 100755 index 0000000000000000000000000000000000000000..62831738595ab466b5f2130dba1914cdfc5097c3 --- /dev/null +++ b/workbench/bin/bfg @@ -0,0 +1,4 @@ +#!/bin/sh +set -eu + +exec java -jar /usr/local/share/bfg/bfg.jar "$@" diff --git a/workbench/bin/gnome-open b/workbench/bin/gnome-open new file mode 100755 index 0000000000000000000000000000000000000000..328ab9ac8d0e5dbe0b5fff9129f9adff21bfd3e0 --- /dev/null +++ b/workbench/bin/gnome-open @@ -0,0 +1,2 @@ +#!/bin/sh +exec gio open "$@" diff --git a/workbench/bin/gpg2 b/workbench/bin/gpg2 new file mode 100755 index 0000000000000000000000000000000000000000..c444d5e4fdb2e5de2eb9819f2e90be9c94a49199 --- /dev/null +++ b/workbench/bin/gpg2 @@ -0,0 +1,2 @@ +#!/bin/sh +exec gpg "$@" diff --git a/workbench/bin/zig b/workbench/bin/zig new file mode 100755 index 0000000000000000000000000000000000000000..287da91c8496bf5bab2c3db19e591747da64e6bf --- /dev/null +++ b/workbench/bin/zig @@ -0,0 +1,2 @@ +#!/bin/sh +exec python3 -m ziglang "$@"