From 942ba101f7bd10306535a3cf03b3fe9fc4d4bfdf Mon Sep 17 00:00:00 2001 From: Jochen Date: Fri, 7 Jun 2024 00:15:28 +0200 Subject: [PATCH] Initial commit --- .github/workflows/build.yml | 41 ++++++++++++++ .gitignore | 1 + .gitlab-ci.yml | 11 ++++ .idea/.gitignore | 1 + .idea/ddev-dind.iml | 8 +++ .idea/modules.xml | 8 +++ .idea/php.xml | 19 +++++++ .idea/vcs.xml | 6 +++ .idea/workspace.xml | 104 ++++++++++++++++++++++++++++++++++++ Dockerfile | 9 ++++ README.md | 4 ++ build.sh | 75 ++++++++++++++++++++++++++ ddev-install.sh | 31 +++++++++++ test.sh | 7 +++ 14 files changed, 325 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 .idea/.gitignore create mode 100644 .idea/ddev-dind.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/php.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 Dockerfile create mode 100644 README.md create mode 100755 build.sh create mode 100755 ddev-install.sh create mode 100644 test.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..69dca85 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,41 @@ +name: Build + +on: + push: + branches: + - main + schedule: + - cron: "0 4 * * *" + +jobs: + build: + name: Build Container + runs-on: ubuntu-latest + strategy: + matrix: + version: [ v1.23, v1.22 ] + steps: + - + name: Checkout code + uses: actions/checkout@v3 + - + name: Docker info + run: docker info + # - + # name: Login to DockerHub + # uses: docker/login-action@v2 + # with: + # username: ${{ secrets.DOCKERHUB_USERNAME }} + # password: ${{ secrets.DOCKERHUB_TOKEN }} + - + name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + platforms: linux/amd64,linux/arm64 + - + name: "ddev ${{ matrix.version }}" + shell: 'script -q -e -c "bash {0}"' + run: ./build.sh -v ${{ matrix.version }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a09c56d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..e1de4e4 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,11 @@ + +ddev-initialize: + stage: project-template-test + image: ochorocho/ochorocho/ddev-docker:v1.23.1 + services: + - name: docker:dind + when: always + script: + - su ddev -c "ddev --version" + - su ddev -c "ddev typo3-init" + - su ddev -c "ddev restart" diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..a09c56d --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1 @@ +/.idea diff --git a/.idea/ddev-dind.iml b/.idea/ddev-dind.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/.idea/ddev-dind.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..fa7fe28 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 0000000..f324872 --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..354916b --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + { + "associatedIndex": 7 +} + + + + { + "keyToString": { + "RunOnceActivity.ShowReadmeOnStart": "true", + "last_opened_file_path": "/Users/jochen/Development/ddev-dind", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "vue.rearranger.settings.migration": "true" + } +} + + + + + + + + + + + + + + + + + 1717618198507 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e40ea63 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM docker:latest + +ARG ddev_version +ENV DDEV_VERSION=${ddev_version} + +COPY ddev-install.sh ddev-install.sh +RUN ash ddev-install.sh +USER ddev +RUN mkcert -install diff --git a/README.md b/README.md new file mode 100644 index 0000000..04f32e3 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# DDEV Docker in Docker (dind) + + +# ddev-docker diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..fd00cf1 --- /dev/null +++ b/build.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash + +GITHUB_OWNER=ddev +PUSH="" +IMAGE_NAME="ochorocho/ddev-docker" +DDEV_VERSION="" + +# @todo: +# * Allow version v1.23 -> v1.23 +# * --push --load options +# * Use bats for tests?! + +help() { + echo "Available options:" + echo " * v - DDEV version e.g. 'v1.23.1'" + echo " * l - Load the image (--load)" + echo " * p - Push the image (--push)" +} + +loadVersionAndTags() { + # @todo: Currently limited to 99 releases, may use pagination + ddev_releases=($(curl --silent -L -H "Accept: application/vnd.github+json" https://api.github.com/repos/${GITHUB_OWNER}/ddev/releases?per_page=99 | jq -r '.[].tag_name')) + + IFS='.' read -r -a version <<< "$OPTION_VERSION" + bugfix_release="${version[2]}" + + if [[ "${version[2]}" == "" ]]; then + bugfix_release="[0-9]+" + # Add minor tag version. In cas only major.minor is given, it will be tagged as well + additional_tag="${version[0]}.${version[1]}" + fi + + pattern="^${version[0]}\.${version[1]}\.${bugfix_release}$" + filtered_array=() + + for element in "${ddev_releases[@]}"; do + if [[ $element =~ $pattern ]]; then + filtered_array+=("$element") + fi + done + + DDEV_VERSION="${filtered_array[0]}" + + # Define image tags + if [[ $additional_tag == "" ]]; then + DOCKER_TAGS=("-t $IMAGE_NAME:${DDEV_VERSION}") + else + DOCKER_TAGS=("-t $IMAGE_NAME:$additional_tag" "-t $IMAGE_NAME:$DDEV_VERSION") + fi +} + +while getopts ":v:h:p" opt; do + case $opt in + h) + help + exit 1 + ;; + v) + OPTION_VERSION="${OPTARG}" + ;; + p) + PUSH="--push" + ;; + *) + echo "Invalid option: -$OPTARG" + help + exit 1 + ;; + esac +done + +loadVersionAndTags + +docker build --progress plain --platform linux/amd64,linux/arm64 --no-cache --pull . -f Dockerfile ${DOCKER_TAGS[@]} --build-arg ddev_version="$DDEV_VERSION" --load $PUSH && \ +docker run --rm -it -v "$(pwd)/test.sh:/tmp/test.sh" --entrypoint "ash" "$IMAGE_NAME:$DDEV_VERSION" /tmp/test.sh diff --git a/ddev-install.sh b/ddev-install.sh new file mode 100755 index 0000000..e5a75e6 --- /dev/null +++ b/ddev-install.sh @@ -0,0 +1,31 @@ +#!/usr/bin/ash + +apk add bash sudo +adduser -D ddev -g "ddev" -s /bin/bash -D ddev -h /home/ddev +echo "ddev ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ddev && chmod 0440 /etc/sudoers.d/ddev +unamearch=$(uname -m) +case ${unamearch} in + x86_64) ARCH="amd64"; +;; + aarch64) ARCH="arm64"; +;; + arm64) ARCH="arm64" +;; +*) printf "${RED}Sorry, your machine architecture ${unamearch} is not currently supported.\n${RESET}" && exit 106 +;; +esac + +echo "https://github.com/ddev/ddev/releases/download/${DDEV_VERSION}/ddev_linux-${ARCH}.${DDEV_VERSION}.tar.gz" + +wget "https://github.com/ddev/ddev/releases/download/${DDEV_VERSION}/ddev_linux-${ARCH}.${DDEV_VERSION}.tar.gz" +tar xfvz "ddev_linux-${ARCH}.${DDEV_VERSION}.tar.gz" +mv ddev /usr/local/bin/ + +# Ensure required folders exist +mkdir -p /home/ddev/.ddev/commands/host +chown -R ddev:ddev /home/ddev/.ddev/ + +# Install mkcert +wget "https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-${ARCH}" +mv "mkcert-v1.4.4-linux-${ARCH}" /usr/local/bin/mkcert +chmod +x /usr/local/bin/mkcert diff --git a/test.sh b/test.sh new file mode 100644 index 0000000..cd56ea6 --- /dev/null +++ b/test.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +docker --version | head -n 1 || exit 1 +docker-compose --version | head -n 1 || exit 1 +ddev --version | head -n 1 || exit 1 +mkcert -version +echo "Current user: $(whoami)"