diff --git a/.chezmoidata.toml b/.chezmoidata.toml new file mode 100644 index 0000000..f004966 --- /dev/null +++ b/.chezmoidata.toml @@ -0,0 +1 @@ +fofa = das diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 44992a0..0222863 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,13 +1,13 @@ FROM docker.pkg.github.com/nolte/vscode-devcontainers/devops:latest -RUN mkdir -p ${WORKON_HOME} \ - && virtualenv -p python3 ${WORKON_HOME}/development \ - && source ${WORKON_HOME}/development/bin/activate \ - && pip install pytest autopep8 pylint jsbeautifier tox \ - && deactivate +# RUN mkdir -p ${WORKON_HOME} \ +# && virtualenv -p python3 ${WORKON_HOME}/development \ +# && source ${WORKON_HOME}/development/bin/activate \ +# && pip install pytest autopep8 pylint jsbeautifier tox \ +# && deactivate -RUN mkdir -p ${WORKON_HOME} \ - && virtualenv -p python3 ${WORKON_HOME}/cookiecutter \ - && source ${WORKON_HOME}/cookiecutter/bin/activate \ - && pip install cookiecutter jinja2-ansible-filters pytest-cookies json-diff autopep8 pylint jsbeautifier \ - && deactivate +# RUN mkdir -p ${WORKON_HOME} \ +# && virtualenv -p python3 ${WORKON_HOME}/cookiecutter \ +# && source ${WORKON_HOME}/cookiecutter/bin/activate \ +# && pip install cookiecutter jinja2-ansible-filters pytest-cookies json-diff autopep8 pylint jsbeautifier \ +# && deactivate diff --git a/.github/workflows/cleanup.yaml b/.github/workflows/cleanup.yaml new file mode 100644 index 0000000..f2aeadd --- /dev/null +++ b/.github/workflows/cleanup.yaml @@ -0,0 +1,40 @@ +name: Branch Deleted + +#on: delete + +on: + push: + branches: ["feature/bump-up", "master"] + pull_request: + branches: [master] + +jobs: + delete: + strategy: + matrix: + image: + - vscode-devcontainers/commons + - vscode-devcontainers/devops + - vscode-devcontainers/python + - vscode-devcontainers/commons-golang + + # if: github.event.ref_type == 'branch' + runs-on: ubuntu-latest + steps: + - id: env-setup + run: | + export image_tag=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} + export image_tag=$(echo $image_tag | tr / -) + + echo "image_tag=$image_tag" >> $GITHUB_OUTPUT + - name: Delete image + uses: lazyfrosch/ghcr-delete-image-action@main + continue-on-error: true + with: + # NOTE: at now only orgs is supported + owner: ${{ github.actor }} + name: ${{ matrix.image }} + is_user: true + # NOTE: using Personal Access Token + token: ${{ secrets.GITHUB_TOKEN }} + tag: ${{ steps.env-setup.outputs.image_tag }} \ No newline at end of file diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index a7ff9ff..37eba2c 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -2,128 +2,166 @@ name: Docker Image CI on: push: - branches: ["feature/ghworkflow", "master"] + branches: ["feature/bump-up", "master"] pull_request: branches: [master] + jobs: + prepare: + runs-on: ubuntu-latest + steps: + - id: env-setup + run: | + export image_tag=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} + export image_tag=$(echo $image_tag | tr / -) + + echo "image_tag=$image_tag" >> $GITHUB_OUTPUT + outputs: + image_tag: ${{ steps.env-setup.outputs.image_tag }} + commons: runs-on: ubuntu-latest + needs: prepare steps: - - uses: actions/checkout@v2 + - name: Checkout + uses: actions/checkout@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} #- name: Build the Docker image # run: docker build -f ./images/commons/Dockerfile -t vscode-commons:$(date +%s) ./images/commons/. - - name: Push to GitHub Packages - uses: docker/build-push-action@v1.1.0 + - id: build + name: Push to GitHub Packages + uses: docker/build-push-action@v5.0.0 with: - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - registry: docker.pkg.github.com - repository: nolte/vscode-devcontainers/commons - dockerfile: ./images/commons/Dockerfile - path: ./images/commons/. - tag_with_ref: false - add_git_labels: true - tags: latest - commonsgolang: + context: ./images/commons/. + tags: ghcr.io/nolte/vscode-devcontainers/commons:${{ needs.prepare.outputs.image_tag }} + # outputs: type=docker,dest=/tmp/commons.tar + + + push: true + # - name: Upload artifact + # uses: actions/upload-artifact@v3 + # with: + # name: commons + # path: /tmp/commons.tar + + + + devops: runs-on: ubuntu-latest - needs: commons + needs: [commons,prepare] steps: - - uses: actions/checkout@v2 - - name: Push to GitHub Packages - uses: docker/build-push-action@v1.1.0 + - name: Checkout + uses: actions/checkout@v4 + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 with: + registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - registry: docker.pkg.github.com - repository: nolte/vscode-devcontainers/commons-golang - dockerfile: ./images/commons-golang/Dockerfile - path: ./images/commons-golang/. - tag_with_ref: false - add_git_labels: true - tags: latest - devgolang: - runs-on: ubuntu-latest - needs: commonsgolang - steps: - - uses: actions/checkout@v2 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v3 + + # - name: Download artifact + # uses: actions/download-artifact@v3 + # with: + # name: commons + # path: /tmp + # - name: Load image + # run: | + # # docker buildx use default + # echo "Tag" + # echo ${{ needs.prepare.outputs.image_tag }} + # echo "---" + # docker load --input /tmp/commons.tar + # echo "---" + # docker image ls -a + # echo "---" + + - name: Push to GitHub Packages - uses: docker/build-push-action@v1.1.0 + uses: docker/build-push-action@v5.0.0 with: - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - registry: docker.pkg.github.com - repository: nolte/vscode-devcontainers/golang - dockerfile: ./images/dev-golang/Dockerfile - path: ./images/dev-golang/. - tag_with_ref: false - add_git_labels: true - tags: latest - devops: + + context: ./images/devops/. + tags: ghcr.io/nolte/vscode-devcontainers/devops:${{ needs.prepare.outputs.image_tag }} + build-args: FROM_IMAGE_VERSION=${{ needs.prepare.outputs.image_tag }} + + push: true + commonsgolang: runs-on: ubuntu-latest - needs: devgolang + needs: [commons,prepare] steps: - - uses: actions/checkout@v2 - - name: Push to GitHub Packages - uses: docker/build-push-action@v1.1.0 + - name: Checkout + uses: actions/checkout@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 with: + registry: ghcr.io username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - registry: docker.pkg.github.com - repository: nolte/vscode-devcontainers/devops - dockerfile: ./images/devops/Dockerfile - path: ./images/devops/. - tag_with_ref: false - add_git_labels: true - tags: latest - npm: - runs-on: ubuntu-latest - needs: devgolang - steps: - - uses: actions/checkout@v2 + password: ${{ secrets.GITHUB_TOKEN }} + # - name: Download artifact + # uses: actions/download-artifact@v3 + # with: + # name: commons + # path: /tmp + # - name: Load image + # run: | + # docker load --input /tmp/commons.tar + - name: Push to GitHub Packages - uses: docker/build-push-action@v1.1.0 + uses: docker/build-push-action@v5.0.0 with: - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - registry: docker.pkg.github.com - repository: nolte/vscode-devcontainers/npm - dockerfile: ./images/npm/Dockerfile - path: ./images/npm/. - tag_with_ref: false - add_git_labels: true - tags: latest + context: ./images/commons-golang/. + tags: ghcr.io/nolte/vscode-devcontainers/commons-golang:${{ needs.prepare.outputs.image_tag }} + #outputs: type=docker,dest=/tmp/commons-golang.tar + build-args: FROM_IMAGE_VERSION=${{ needs.prepare.outputs.image_tag }} + push: true + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + name: commons-golang + path: /tmp/commons-golang.tar + python: runs-on: ubuntu-latest - needs: devgolang + needs: [commonsgolang,prepare] steps: - - uses: actions/checkout@v2 - - name: Push to GitHub Packages - uses: docker/build-push-action@v1.1.0 + - name: Checkout + uses: actions/checkout@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 with: + registry: ghcr.io username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - registry: docker.pkg.github.com - repository: nolte/vscode-devcontainers/python - dockerfile: ./images/python/Dockerfile - path: ./images/python/. - tag_with_ref: false - add_git_labels: true - tags: latest - k8soperator: - runs-on: ubuntu-latest - needs: [devgolang, devops] - steps: - - uses: actions/checkout@v2 + password: ${{ secrets.GITHUB_TOKEN }} + # - name: Download artifact + # uses: actions/download-artifact@v3 + # with: + # name: commons-golang + # path: /tmp + # - name: Load image + # run: | + # docker load --input /tmp/commons-golang.tar + - name: Push to GitHub Packages - uses: docker/build-push-action@v1.1.0 + uses: docker/build-push-action@v5.0.0 with: - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - registry: docker.pkg.github.com - repository: nolte/vscode-devcontainers/k8s-operator - dockerfile: ./images/k8sOperator/Dockerfile - path: ./images/k8sOperator/. - tag_with_ref: false - add_git_labels: true - tags: latest + context: ./images/python/. + tags: ghcr.io/nolte/vscode-devcontainers/python:${{ needs.prepare.outputs.image_tag }} + build-args: FROM_IMAGE_VERSION=${{ needs.prepare.outputs.image_tag }} + + + push: true \ No newline at end of file diff --git a/Makefile b/Makefile index cbc402b..d05969d 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ .PHONY: build -REGISTRY=docker.pkg.github.com/nolte/vscode-devcontainers +REGISTRY=ghcr.io/nolte/vscode-devcontainers default: build diff --git a/README.md b/README.md index 11c7be4..26904e3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # Visual Studo Code DevContainers -The Containers are tested with Docker ``19.03.8`` and based on [qdm12/basedevcontainer](https://github.com/qdm12/basedevcontainer). +A standardised development environment is necessary for working on a wide range of projects, even after a certain period of time has elapsed. + +So we create a set of pre configured [Dev Containers](https://code.visualstudio.com/docs/remote/containers) based on [qdm12/basedevcontainer](https://github.com/qdm12/basedevcontainer). ## Usage @@ -30,30 +32,23 @@ For build the images localy use the ``Makefile`` with ``make build`` and trink a | *image* (*project_type*) | *base on* | *description* | |---------------------------------------------------------------------------------|------------------------------------|---------------| -| ```docker.pkg.github.com/nolte/vscode-devcontainers/commons``` _(default)_ | | | -| ```docker.pkg.github.com/nolte/vscode-devcontainers/devops``` _(devops)_ | ```vscode-devcontainers/commons``` | | -| ```docker.pkg.github.com/nolte/vscode-devcontainers/python``` _(python)_ | ```vscode-devcontainers/commons``` | | -| ```docker.pkg.github.com/nolte/vscode-devcontainers/golang``` _(golang)_ | ```vscode-devcontainers/commons``` | | -| ```docker.pkg.github.com/nolte/vscode-devcontainers/k8s-operator``` _(default)_ | ```vscode-devcontainers/golang``` | | -| ```docker.pkg.github.com/nolte/vscode-devcontainers/npm``` _(npm)_ | ```vscode-devcontainers/commons``` | | -| ```docker.pkg.github.com/nolte/vscode-devcontainers/iot``` _(iot)_ | ```vscode-devcontainers/commons``` | | +| ```ghcr.io/nolte/vscode-devcontainers/commons``` _(default)_ | | | +| ```ghcr.io/nolte/vscode-devcontainers/devops``` _(devops)_ | ```vscode-devcontainers/commons``` | | +| ```ghcr.io/nolte/vscode-devcontainers/python``` _(python)_ | ```vscode-devcontainers/commons``` | | +| ```ghcr.io/nolte/vscode-devcontainers/golang``` _(golang)_ | ```vscode-devcontainers/commons``` | | +| ```ghcr.io/nolte/vscode-devcontainers/k8s-operator``` _(default)_ | ```vscode-devcontainers/golang``` | | +| ```ghcr.io/nolte/vscode-devcontainers/npm``` _(npm)_ | ```vscode-devcontainers/commons``` | | +| ```ghcr.io/nolte/vscode-devcontainers/iot``` _(iot)_ | ```vscode-devcontainers/commons``` | | ... sorry but at the moment the Pulic Github Docker Repoisitory is not realy public like [hub.docker.com]. see ([github.community](https://github.community/t5/GitHub-Actions/docker-pull-from-public-GitHub-Package-Registry-fail-with-quot/td-p/32782)) ```bash -pass internet/github.com/nolte/package_management_token | docker login docker.pkg.github.com --username nolte --password-stdin +pass internet/github.com/nolte/package_management_token | docker login ghcr.io --username nolte --password-stdin ``` ### Basement Env ### DevOps Env -Installed tools like [terraform](),[helm](),[kubectl](),[ansible]() and many more. - -#### Extra Terraform Providers - -* [terraform-provider-keycloak](https://github.com/mrparkers/terraform-provider-keycloak) -* [terraform-provider-minio](https://github.com/aminueza/terraform-provider-minio) -* [terraform-provider-kubectl](https://github.com/gavinbunney/terraform-provider-kubectl) -* [terraform-harbor-provider](https://github.com/BESTSELLER/terraform-harbor-provider) +This env will be configured by the [twpayne/chezmoi](https://github.com/twpayne/chezmoi) based Configuration scripts, [nolte/workstation](https://github.com/nolte/workstation). diff --git a/images/commons-golang/Dockerfile b/images/commons-golang/Dockerfile index 8185faf..ce6a4ca 100644 --- a/images/commons-golang/Dockerfile +++ b/images/commons-golang/Dockerfile @@ -1,21 +1,21 @@ -ARG FROM_REGISTRY=docker.pkg.github.com/nolte/vscode-devcontainers +ARG FROM_REGISTRY=ghcr.io/nolte/vscode-devcontainers ARG FROM_IMAGE_NAME=commons ARG FROM_IMAGE_VERSION=latest -ARG ALPINE_VERSION=3.11 -ARG GO_VERSION=1.14 +ARG ALPINE_VERSION=3.18 +ARG GO_VERSION=1.21 # See https://github.com/golang/go/issues/14481 FROM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS race -WORKDIR /tmp/race -RUN apk --update -q --progress --no-cache add git g++ -RUN git clone --single-branch https://github.com/llvm-mirror/compiler-rt . && \ - git reset --hard 69445f095c22aac2388f939bedebf224a6efcdaf -RUN wget -q https://github.com/golang/go/files/4114545/0001-upstream-master-69445f095-hack-to-make-Go-s-race-flag-work-on-Alpine.patch.gz -O patch.gz && \ - gunzip patch.gz && \ - patch -p1 -i patch -WORKDIR /tmp/race/lib/tsan/go -RUN sed -e 's,-Wno-unknown-warning-option,-Wno-error=deprecated,' -i buildgo.sh -RUN ./buildgo.sh +#WORKDIR /tmp/race +#RUN apk --update -q --progress --no-cache add git g++ +#RUN git clone --single-branch https://github.com/llvm-mirror/compiler-rt . && \ +# git reset --hard 69445f095c22aac2388f939bedebf224a6efcdaf +#RUN wget -q https://github.com/golang/go/files/4114545/0001-upstream-master-69445f095-hack-to-make-Go-s-race-flag-work-on-Alpine.patch.gz -O patch.gz && \ +# gunzip patch.gz && \ +# patch -p1 -i patch +#WORKDIR /tmp/race/lib/tsan/go +#RUN sed -e 's,-Wno-unknown-warning-option,-Wno-error=deprecated,' -i buildgo.sh +#RUN ./buildgo.sh FROM ${FROM_REGISTRY}/${FROM_IMAGE_NAME}:${FROM_IMAGE_VERSION} @@ -38,7 +38,7 @@ LABEL \ USER root # TODO use build args COPY --from=race /usr/local/go /usr/local/go -COPY --from=race /tmp/race/lib/tsan/go/race_linux_amd64.syso /usr/local/go/src/runtime/race/race_linux_amd64.syso +# COPY --from=race /tmp/race/lib/tsan/go/race_linux_amd64.syso /usr/local/go/src/runtime/race/race_linux_amd64.syso ENV GOPATH=/go ENV PATH=$GOPATH/bin:/usr/local/go/bin:$PATH \ CGO_ENABLED=0 \ @@ -52,13 +52,12 @@ COPY --chown=${USER_UID}:${USER_GID} files/.zshrc-specific files/.welcome.sh /ho COPY files/.zshrc-specific files/.welcome.sh /root/ # install common go tool sets -RUN go get -v \ - github.com/magefile/mage \ - github.com/evanphx/json-patch/cmd/json-patch \ - 2>&1 && \ - rm -rf $GOPATH/pkg/* $GOPATH/src/* /root/.cache/go-build && \ - chown -R ${USER_UID}:${USER_GID} $GOPATH && \ - chmod -R 700 $GOPATH +#RUN go install -v \ +# github.com/magefile/mage@latest \ +# 2>&1 && \ +# rm -rf $GOPATH/pkg/* $GOPATH/src/* /root/.cache/go-build && \ +# chown -R ${USER_UID}:${USER_GID} $GOPATH && \ +# chmod -R 700 $GOPATH RUN mkdir -p /go/src && chown -R ${USER_UID}:${USER_GID} /go/src \ diff --git a/images/commons/Dockerfile b/images/commons/Dockerfile index aed9a5e..4edf185 100644 --- a/images/commons/Dockerfile +++ b/images/commons/Dockerfile @@ -1,5 +1,5 @@ -FROM qmcgaw/basedevcontainer:alpine +FROM qmcgaw/basedevcontainer:v0.24.0-alpine ENV USERNAME=vscode ENV USER_UID=1000 @@ -7,9 +7,12 @@ ENV USER_GID=1000 ENV WORKON_HOME=/home/${USERNAME}/.virtualenvs # https://github.com/cli/cli/releases/ -ENV GH_CLI_VERSION=0.8.0 +ENV GH_CLI_VERSION=2.23.0 -USER root +RUN id + +RUN addgroup -g ${USER_GID} ${USERNAME} \ + && adduser -D ${USERNAME} --uid ${USER_UID} --ingroup ${USERNAME} # Adding fonts @@ -28,12 +31,22 @@ ENV PYTHONUNBUFFERED=1 RUN echo "**** install Python ****" && \ apk add --update-cache \ - curl wget \ + bash \ boost-regex \ - sed \ + bzip2-dev \ + curl wget \ jq tar rsync unzip tree vim \ - bash \ + libbz2 \ + ncurses-dev \ + readline-dev \ + sed \ + sqlite \ + sqlite-dev \ + tar \ + xz \ + xz-dev \ zip \ + zlib-dev \ libc6-compat python3 build-base python3-dev libffi libffi-dev openssl-dev \ linux-headers gnupg openssl gcc build-base libc-dev musl-dev ca-certificates \ && rm -rf /var/cache/apk/* && \ @@ -45,37 +58,21 @@ RUN echo "**** install Python ****" && \ pip3 install --no-cache --upgrade pip setuptools wheel virtualenvwrapper virtualenv && \ if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi - -RUN mkdir -p /opt/pass && \ - wget https://git.zx2c4.com/password-store/snapshot/password-store-1.7.3.tar.xz -O /tmp/password-store.tar.xz && \ - tar -xf /tmp/password-store.tar.xz -C /opt/pass && \ - ln -s /opt/pass/password-store-1.7.3 /opt/pass/current && \ - cd /opt/pass/current/ && \ - make install - RUN mkdir -p /home/$USERNAME/.vscode-server/extensions \ /home/$USERNAME/.vscode-server-insiders/extensions \ && chown -R $USERNAME \ /home/$USERNAME/.vscode-server \ /home/$USERNAME/.vscode-server-insiders -RUN curl -Lo ./gh.tar.gz https://github.com/cli/cli/releases/download/v${GH_CLI_VERSION}/gh_${GH_CLI_VERSION}_linux_amd64.tar.gz \ - && tar -zxf ./gh.tar.gz \ - && mv ./gh_${GH_CLI_VERSION}_linux_amd64/bin/gh /usr/local/bin/gh \ - && chmod +x /usr/local/bin/gh \ - && rm ./gh.tar.gz \ - && rm -rf ./gh_${GH_CLI_VERSION}_linux_amd64 +# RUN curl -Lo ./gh.tar.gz https://github.com/cli/cli/releases/download/v${GH_CLI_VERSION}/gh_${GH_CLI_VERSION}_linux_amd64.tar.gz \ +# && tar -zxf ./gh.tar.gz \ +# && mv ./gh_${GH_CLI_VERSION}_linux_amd64/bin/gh /usr/local/bin/gh \ +# && chmod +x /usr/local/bin/gh \ +# && rm ./gh.tar.gz \ +# && rm -rf ./gh_${GH_CLI_VERSION}_linux_amd64 USER ${USERNAME} - -COPY --chown=${USER_UID}:${USER_GID} files/python-env-basement.txt /home/${USERNAME}/vens/python-env-basement.txt - - -RUN mkdir -p ${WORKON_HOME} \ - && virtualenv -p python3 ${WORKON_HOME}/development \ - && source ${WORKON_HOME}/development/bin/activate \ - && pip install -r /home/${USERNAME}/vens/python-env-basement.txt \ - && deactivate +RUN git clone --single-branch --depth 1 https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh COPY --chown=${USER_UID}:${USER_GID} files/.zshrc-specific files/.welcome.sh /home/${USERNAME}/ RUN touch /home/${USERNAME}/.zshrc-specific.sh \ No newline at end of file diff --git a/images/commons/files/python-env-basement.txt b/images/commons/files/python-env-basement.txt deleted file mode 100644 index 5d7f66f..0000000 --- a/images/commons/files/python-env-basement.txt +++ /dev/null @@ -1,7 +0,0 @@ -pre-commit -python-gilt -mkdocs -yamllint -yamale -cookiecutter -jinja2-ansible-filters diff --git a/images/dev-golang/Dockerfile b/images/dev-golang/Dockerfile index 0f7ef9d..1be7a9e 100644 --- a/images/dev-golang/Dockerfile +++ b/images/dev-golang/Dockerfile @@ -1,4 +1,4 @@ -ARG FROM_REGISTRY=docker.pkg.github.com/nolte/vscode-devcontainers +ARG FROM_REGISTRY=ghcr.io/nolte/vscode-devcontainers ARG FROM_IMAGE_NAME=commons-golang ARG FROM_IMAGE_VERSION=latest FROM ${FROM_REGISTRY}/${FROM_IMAGE_NAME}:${FROM_IMAGE_VERSION} diff --git a/images/devops/Dockerfile b/images/devops/Dockerfile index 854b707..1d4c4de 100644 --- a/images/devops/Dockerfile +++ b/images/devops/Dockerfile @@ -1,268 +1,31 @@ -ARG FROM_REGISTRY=docker.pkg.github.com/nolte/vscode-devcontainers -ARG FROM_IMAGE_NAME=commons-golang +ARG FROM_REGISTRY=ghcr.io/nolte/vscode-devcontainers +ARG FROM_IMAGE_NAME=commons #ARG FROM_IMAGE_NAME=golang ARG FROM_IMAGE_VERSION=latest -FROM ${FROM_REGISTRY}/${FROM_IMAGE_NAME}:${FROM_IMAGE_VERSION} - -#ARG USERNAME=vscode -#ARG USER_UID=1000 -#ARG USER_GID=1000 - -USER root - -# https://github.com/helm/helm/releases -ENV HELM_VERSION=v3.3.4 - -# https://github.com/kubernetes-sigs/kind/releases -ENV KIND_VERSION=v0.9.0 - -# https://github.com/helm/chart-testing/releases -ENV HELM_CHART_TESTING_VERSION=3.1.1 - -# https://github.com/helm/chart-releaser -ENV HELM_CHART_RELEASER_VERSION=1.0.0 - -# https://github.com/docker/buildx/releases -ENV DOCKERX_VERSION=v0.4.2 - -# https://github.com/hashicorp/terraform/releases -ENV TERRAFORM_VERSION=0.13.3 - -# https://github.com/bats-core/bats-core/releases -ENV BATS_VERSION=1.2.1 - -# https://github.com/mikefarah/yq/releases -ENV YQ_VERSION=3.4.0 - -# https://github.com/hashicorp/vault/releases -ENV VAULT_VERSION=1.5.4 - -## https://github.com/gavinbunney/terraform-provider-kubectl/releases -#ENV TERRAFORM_KUBECTL_PROVIDER_VERSION=v1.5.1 -# -## https://github.com/aminueza/terraform-provider-minio/releases -#ENV TERRAFORM_MINIO_PROVIDER_VERSION=1.1.0 -# -## https://github.com/mrparkers/terraform-provider-keycloak/releases -#ENV TERRAFORM_KEYCLOAK_PROVIDER_VERSION=1.20.0 -# -## https://github.com/nolte/terraform-provider-harbor/releases -#ENV TERRAFORM_HARBOR_PROVIDER_VERSION=0.1.5 - -# https://github.com/camptocamp/terraform-provider-pass/releases -#ENV TERRAFORM_PASS_PROVIDER_VERSION=v1.3.0 - -# https://github.com/go-swagger/go-swagger/releases -ENV SWAGGER_VERSION=v0.25.0 - -# https://github.com/terraform-docs/terraform-docs/releases -ENV TERRAFORM_DOC_VERSION=v0.10.0 - -# https://github.com/cli/cli/releases -ENV GITHUB_CLI_VERSION=1.0.0 - -# https://github.com/tektoncd/cli/releases -ENV TEKTONCD_CLI_VERSION=0.12.1 - -# https://github.com/kubernetes-sigs/kustomize/releases -ENV KUSTOMIZE_VERSION=3.8.4 - -# https://github.com/hashicorp/packer/releases -ARG PACKER_VERSION=1.6.3 - - -RUN apk add --update-cache \ - ncurses \ - nodejs npm \ - && rm -rf /var/cache/apk/* - -RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl \ - && chmod +x ./kubectl \ - && mv ./kubectl /usr/local/bin/kubectl - -RUN curl -Lo ./helm.tar.gz https://get.helm.sh/helm-${HELM_VERSION}-linux-amd64.tar.gz \ - && tar -zxvf ./helm.tar.gz \ - && mv ./linux-amd64/helm /usr/local/bin/helm \ - && chmod +x /usr/local/bin/helm \ - && rm ./helm.tar.gz \ - && rm -rf ./linux-amd64 - -RUN curl -Lo ./terraform.zip https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip \ - && unzip ./terraform.zip \ - && mv ./terraform /usr/local/bin/terraform \ - && chmod +x /usr/local/bin/terraform \ - && rm ./terraform.zip - -RUN curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/${KIND_VERSION}/kind-$(uname)-amd64 \ - && chmod +x ./kind \ - && mv ./kind /usr/local/bin/kind - -RUN curl -Lo /usr/local/bin/kubetail https://raw.githubusercontent.com/johanhaleby/kubetail/master/kubetail \ - && chmod +x /usr/local/bin/kubetail - -RUN curl -sSL -k https://github.com/bats-core/bats-core/archive/v${BATS_VERSION}.tar.gz -o /tmp/bats.tgz \ - && tar -zxf /tmp/bats.tgz -C /tmp \ - && /bin/bash /tmp/bats-core-${BATS_VERSION}/install.sh /usr/local - -RUN curl -Lo /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_amd64 \ - && chmod +x /usr/local/bin/yq - -RUN curl -Lo ./vault.zip https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip \ - && unzip ./vault.zip \ - && mv ./vault /usr/local/bin/vault \ - && chmod +x /usr/local/bin/vault \ - && rm ./vault.zip - -# minio admin tools -RUN curl -Lo /usr/local/bin/mc https://dl.min.io/client/mc/release/linux-amd64/mc \ - && chmod +x /usr/local/bin/mc - -RUN curl -Lo /usr/local/bin/swagger https://github.com/go-swagger/go-swagger/releases/download/${SWAGGER_VERSION}/swagger_linux_amd64 \ - && chmod +x /usr/local/bin/swagger - -RUN curl -Lo /usr/local/bin/terraform-doc https://github.com/segmentio/terraform-docs/releases/download/${TERRAFORM_DOC_VERSION}/terraform-docs-${TERRAFORM_DOC_VERSION}-$(uname | tr '[:upper:]' '[:lower:]')-amd64 \ - && chmod +x /usr/local/bin/terraform-doc - - -RUN curl -sSL -k https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.x86_64.tar.xz -o /tmp/shellcheck-stable.tar.xz \ - && tar -xvf /tmp/shellcheck-stable.tar.xz -C /tmp \ - && mv /tmp/shellcheck-stable/shellcheck /usr/local/bin/shellcheck \ - && chmod +x /usr/local/bin/shellcheck \ - && rm -rf /tmp/shellcheck-stable \ - && rm /tmp/shellcheck-stable.tar.xz - -RUN curl -Lo /usr/local/bin/skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 \ - && chmod +x /usr/local/bin/skaffold - -# install tekton binary -RUN curl -LO https://github.com/tektoncd/cli/releases/download/v${TEKTONCD_CLI_VERSION}/tkn_${TEKTONCD_CLI_VERSION}_Linux_x86_64.tar.gz \ - && tar xvzf tkn_${TEKTONCD_CLI_VERSION}_Linux_x86_64.tar.gz -C /usr/local/bin tkn \ - && rm tkn_${TEKTONCD_CLI_VERSION}_Linux_x86_64.tar.gz \ - && chmod +x /usr/local/bin/tkn - -RUN curl -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv${KUSTOMIZE_VERSION}/kustomize_v${KUSTOMIZE_VERSION}_linux_amd64.tar.gz \ - && tar xvzf kustomize_v${KUSTOMIZE_VERSION}_linux_amd64.tar.gz -C /usr/local/bin kustomize \ - && rm kustomize_v${KUSTOMIZE_VERSION}_linux_amd64.tar.gz \ - && chmod +x /usr/local/bin/kustomize - - -RUN mkdir -p /tmp/chart-testing \ - && curl -L https://github.com/helm/chart-testing/releases/download/v${HELM_CHART_TESTING_VERSION}/chart-testing_${HELM_CHART_TESTING_VERSION}_linux_amd64.tar.gz -o /tmp/chart-testing/chart-testing.tar.gz \ - && tar xvzf /tmp/chart-testing/chart-testing.tar.gz -C /tmp/chart-testing \ - && mkdir -p /etc/ct \ - && mv /tmp/chart-testing/ct /usr/local/bin/ct \ - && mv /tmp/chart-testing/etc/chart_schema.yaml /etc/ct/chart_schema.yaml \ - && mv /tmp/chart-testing/etc/lintconf.yaml /etc/ct/lintconf.yaml \ - && rm -rf /tmp/chart-testing \ - && chmod +x /usr/local/bin/ct - - -RUN mkdir -p /tmp/chart-releaser \ - && curl -L https://github.com/helm/chart-releaser/releases/download/v${HELM_CHART_RELEASER_VERSION}/chart-releaser_${HELM_CHART_RELEASER_VERSION}_linux_amd64.tar.gz -o /tmp/chart-releaser/chart-releaser.tar.gz \ - && tar xvzf /tmp/chart-releaser/chart-releaser.tar.gz -C /tmp/chart-releaser \ - && mv /tmp/chart-releaser/cr /usr/local/bin/cr \ - && rm -rf /tmp/chart-releaser \ - && chmod +x /usr/local/bin/cr - - -# https://github.com/GoogleContainerTools/container-structure-test -RUN curl -LO https://storage.googleapis.com/container-structure-test/latest/container-structure-test-linux-amd64 && chmod +x container-structure-test-linux-amd64 && mv container-structure-test-linux-amd64 /usr/local/bin/container-structure-test - - -RUN curl -Lo ./terraform-docs https://github.com/terraform-docs/terraform-docs/releases/download/${TERRAFORM_DOCS_VERSION}/terraform-docs-${TERRAFORM_DOCS_VERSION}-$(uname | tr '[:upper:]' '[:lower:]')-amd64 && \ - chmod +x ./terraform-docs && \ - mv ./terraform-docs /usr/local/bin/terraform-docs - -RUN mkdir -p /tmp/ghcli \ - && curl -L https://github.com/cli/cli/releases/download/v${GITHUB_CLI_VERSION}/gh_${GITHUB_CLI_VERSION}_linux_arm64.tar.gz -o /tmp/ghcli/gh.tar.gz \ - && tar xvzf /tmp/ghcli/gh.tar.gz -C /tmp/ghcli \ - && mv /tmp/ghcli/gh_${GITHUB_CLI_VERSION}_linux_arm64/bin/gh /usr/local/bin/gh \ - && rm -rf /tmp/ghcli \ - && chmod +x /usr/local/bin/gh - - - -RUN mkdir -p /tmp/packer/ \ - && curl -Lo /tmp/packer/packer.zip https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_linux_amd64.zip \ - && unzip "/tmp/packer/packer.zip" -d /usr/local/bin \ - && rm -rf /tmp/packer \ - && chmod +x /usr/local/bin/packer +FROM ${FROM_REGISTRY}/${FROM_IMAGE_NAME}:${FROM_IMAGE_VERSION} USER ${USERNAME} -COPY --chown=${USER_UID}:${USER_GID} files/python-env-usage-ansible.txt /home/${USERNAME}/vens/python-env-usage-ansible.txt -#ARG WORKON_HOME=/home/${USERNAME}/.virtualenvs - -RUN mkdir -p ${WORKON_HOME} \ - && virtualenv -p python3 ${WORKON_HOME}/usage-ansible \ - && source ${WORKON_HOME}/usage-ansible/bin/activate \ - && pip install -r /home/${USERNAME}/vens/python-env-usage-ansible.txt \ - && deactivate - -COPY --chown=${USER_UID}:${USER_GID} files/devops-zshrc-specific /home/${USERNAME}/.zshrc-specific -COPY --chown=${USER_UID}:${USER_GID} files/devops-welcome.sh /home/${USERNAME}/.welcome.sh - - -#RUN mkdir -p /home/${USERNAME}/.terraform.d/plugins/linux_amd64 \ -# && curl -Lo /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-provider-kubectl https://github.com/gavinbunney/terraform-provider-kubectl/releases/download/${TERRAFORM_KUBECTL_PROVIDER_VERSION}/terraform-provider-kubectl-linux-amd64 \ -# && chmod +x /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-provider-kubectl -# -# -#RUN mkdir -p /home/${USERNAME}/.terraform.d/plugins/linux_amd64 \ -# && curl -Lo /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-provider-minio https://github.com/aminueza/terraform-provider-minio/releases/download/${TERRAFORM_MINIO_PROVIDER_VERSION}/terraform-provider-minio_v${TERRAFORM_MINIO_PROVIDER_VERSION}_linux_amd64 \ -# && chmod +x /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-provider-minio -# -# -#RUN mkdir -p /tmp/terraform-provider-keycloak/ \ -# && curl -Lo /tmp/terraform-provider-keycloak/terraform-provider-keycloak.zip https://github.com/mrparkers/terraform-provider-keycloak/releases/download/${TERRAFORM_KEYCLOAK_PROVIDER_VERSION}/terraform-provider-keycloak_v${TERRAFORM_KEYCLOAK_PROVIDER_VERSION}_linux_amd64.zip \ -# && unzip -j "/tmp/terraform-provider-keycloak/terraform-provider-keycloak.zip" "terraform-provider-keycloak_v${TERRAFORM_KEYCLOAK_PROVIDER_VERSION}" -d /home/${USERNAME}/.terraform.d/plugins/linux_amd64 \ -# && rm -rf /tmp/terraform-provider-keycloak \ -# && chmod +x /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-provider-keycloak* -# -# -#RUN mkdir -p /tmp/terraform-provider-harbor/ \ -# && curl -Lo /tmp/terraform-provider-harbor/terraform-provider-harbor.zip https://github.com/BESTSELLER/terraform-harbor-provider/releases/download/v${TERRAFORM_HARBOR_PROVIDER_VERSION}/terraform-harbor-provider-linux-amd64.zip \ -# && unzip -j "/tmp/terraform-provider-harbor/terraform-provider-harbor.zip" "terraform-harbor-provider" -d /home/${USERNAME}/.terraform.d/plugins/linux_amd64 \ -# && rm -rf /tmp/terraform-provider-harbor \ -# && chmod +x /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-harbor-provider \ -# && mv /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-harbor-provider /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-provider-harbor - - -#RUN mkdir -p /home/${USERNAME}/.terraform.d/plugins/linux_amd64 \ -# && wget -qO- https://github.com/nolte/terraform-provider-harbor/releases/download/release/v${TERRAFORM_HARBOR_PROVIDER_VERSION}/terraform-provider-harbor_v${TERRAFORM_HARBOR_PROVIDER_VERSION}_linux_amd64.tar.gz | tar -xvz -C ~/.terraform.d/plugins/linux_amd64/ \ -# && chmod +x /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-provider-harbor -# -#RUN mkdir -p /tmp/terraform-provider-pass/ \ -# && curl -Lo /tmp/terraform-provider-pass/terraform-provider-pass.zip https://github.com/camptocamp/terraform-provider-pass/releases/download/${TERRAFORM_PASS_PROVIDER_VERSION}/terraform-provider-pass_${TERRAFORM_PASS_PROVIDER_VERSION}_linux_amd64.zip \ -# && unzip -j "/tmp/terraform-provider-pass/terraform-provider-pass.zip" "bin/terraform-provider-pass_${TERRAFORM_PASS_PROVIDER_VERSION}_linux_amd64" -d /home/${USERNAME}/.terraform.d/plugins/linux_amd64 \ -# && rm -rf /tmp/terraform-provider-pass \ -# && chmod +x /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-provider-pass_${TERRAFORM_PASS_PROVIDER_VERSION}_linux_amd64 \ -# && mv /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-provider-pass_${TERRAFORM_PASS_PROVIDER_VERSION}_linux_amd64 /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-provider-pass -# -# TODO Find better way for local compiled providers -# COPY --chown=${USER_UID}:${USER_GID} ./providers/terraform-provider-gitea_v1.0_linux_amd64 /home/${USERNAME}/.terraform.d/plugins/linux_amd64/terraform-provider-gitea - -RUN mkdir -p /home/${USERNAME}/.oh-my-zsh/custom/plugins/ \ - && git clone https://github.com/johanhaleby/kubetail.git /home/${USERNAME}/.oh-my-zsh/custom/plugins/kubetail - -RUN mkdir -p /home/${USERNAME}/.docker/cli-plugins/ \ - && curl -Lo /home/${USERNAME}/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/${DOCKERX_VERSION}/buildx-${DOCKERX_VERSION}.linux-amd64 \ - && chmod +x /home/${USERNAME}/.docker/cli-plugins/docker-buildx +ENV ASDF_VERSION=v0.13.1 +COPY --chown=${USER_UID}:${USER_GID} files/.tool-versions /home/${USERNAME}/.tool-versions +COPY --chown=${USER_UID}:${USER_GID} files/.zshrc /home/${USERNAME}/.zshrc -RUN mkdir "/home/${USERNAME}/.npm-packages" -RUN npm config set prefix "/home/${USERNAME}/.npm-packages" +RUN git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch ${ASDF_VERSION} && \ + echo '. $HOME/.asdf/asdf.sh' >> $HOME/.bashrc && \ + echo '. $HOME/.asdf/asdf.sh' >> $HOME/.profile -RUN curl https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash +ENV PATH="${PATH}:/home/${USERNAME}/.asdf/shims:/home/${USERNAME}/.asdf/bin" -RUN npm i madr adr-log -g -RUN helm plugin install https://github.com/databus23/helm-diff \ - && helm plugin install https://github.com/fabmation-gmbh/helm-whatup +RUN asdf plugin add chezmoi https://github.com/nolte/asdf-chezmoi.git \ + && asdf plugin update chezmoi fix/39-alpine-usage \ + && asdf install -RUN curl -L "$(curl -s https://api.github.com/repos/terraform-linters/tflint/releases/latest | grep -o -E "https://.+?_linux_amd64.zip")" > tflint.zip && unzip tflint.zip && rm tflint.zip && sudo mv tflint /usr/local/bin +ENV ASDF_DIR="/home/${USERNAME}/.asdf" -RUN git config --global init.templateDir /home/${USERNAME}/.git-template \ - && source ~/.virtualenvs/development/bin/activate \ - && pre-commit init-templatedir -t pre-commit /home/${USERNAME}/.git-template \ No newline at end of file +RUN chezmoi init https://github.com/nolte/workstation.git --branch feature/toolset \ + && source ~/.bashrc \ + && chezmoi apply \ + && asdf install diff --git a/images/devops/files/.tool-versions b/images/devops/files/.tool-versions new file mode 100644 index 0000000..ff2796e --- /dev/null +++ b/images/devops/files/.tool-versions @@ -0,0 +1 @@ +chezmoi 2.40.0 \ No newline at end of file diff --git a/images/devops/files/.zshrc b/images/devops/files/.zshrc new file mode 100644 index 0000000..972343a --- /dev/null +++ b/images/devops/files/.zshrc @@ -0,0 +1,39 @@ + +# Path to your oh-my-zsh installation. +export ZSH=$HOME/.oh-my-zsh + +# Set name of the theme to load --- if set to "random", it will +# load a random theme each time oh-my-zsh is loaded, in which case, +# to know which specific one was loaded, run: echo $RANDOM_THEME +# See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes +ZSH_THEME="agnoster" + +# Uncomment the following line to disable bi-weekly auto-update checks. +DISABLE_AUTO_UPDATE="true" + +# Which plugins would you like to load? +# Standard plugins can be found in ~/.oh-my-zsh/plugins/* +# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/ +# Example format: plugins=(rails git textmate ruby lighthouse) +# Add wisely, as too many plugins slow down shell startup. +plugins=(asdf git helm kubectl pass terraform vault) + +source $ZSH/oh-my-zsh.sh + + +source <(kubectl completion zsh) +source <(helm completion zsh) +source <(chezmoi completion zsh) +source <(argocd completion zsh) +source <(argo completion zsh) + + +# display kubctl context +autoload -U colors; colors +# source $ZSH/custom/plugins/zsh-kubectl-prompt/kubectl.zsh +RPROMPT='%{$fg[blue]%}($ZSH_KUBECTL_PROMPT)%{$reset_color%}' + +if [ -e "$HOME/.asdf/asdf.sh" ]; then + source $HOME/.asdf/asdf.sh + source $HOME/.asdf/completions/asdf.bash +fi diff --git a/images/iot/Dockerfile b/images/iot/Dockerfile index 49d69ac..6c5c05c 100644 --- a/images/iot/Dockerfile +++ b/images/iot/Dockerfile @@ -1,4 +1,4 @@ -ARG FROM_REGISTRY=docker.pkg.github.com/nolte/vscode-devcontainers +ARG FROM_REGISTRY=ghcr.io/nolte/vscode-devcontainers ARG FROM_IMAGE_NAME=commons-golang ARG FROM_IMAGE_VERSION=latest FROM ${FROM_REGISTRY}/${FROM_IMAGE_NAME}:${FROM_IMAGE_VERSION} diff --git a/images/python/Dockerfile b/images/python/Dockerfile index fa6677a..908b45e 100644 --- a/images/python/Dockerfile +++ b/images/python/Dockerfile @@ -1,4 +1,4 @@ -ARG FROM_REGISTRY=docker.pkg.github.com/nolte/vscode-devcontainers +ARG FROM_REGISTRY=ghcr.io/nolte/vscode-devcontainers ARG FROM_IMAGE_NAME=commons-golang ARG FROM_IMAGE_VERSION=latest FROM ${FROM_REGISTRY}/${FROM_IMAGE_NAME}:${FROM_IMAGE_VERSION}