diff --git a/.github/workflows/ce-dev-build.yml b/.github/workflows/ce-dev-build.yml index 946aa33..d9c3601 100644 --- a/.github/workflows/ce-dev-build.yml +++ b/.github/workflows/ce-dev-build.yml @@ -51,16 +51,3 @@ jobs: body_path: RELEASE env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Build and publish docs - run: | - cd - curl -sL https://raw.githubusercontent.com/codeenigma/ce-dev/1.x/install.sh | /bin/sh -s -- linux - git clone https://github.com/codeenigma/wikis2pages.git - cd wikis2pages - /bin/sh init.sh https://${{ secrets.GITHUB_TOKEN }}@github.com/codeenigma/ce-dev.git 1.x - /bin/sh set-current.sh ce-dev-travis - docker exec --user ce-dev --workdir /home/ce-dev/deploy/live.local wikis2pages-hugo hugo - /bin/sh .github-actions-push.sh - cd /home/runner/wikis2pages/public/ce-dev-travis - git remote add ci https://${{ secrets.DOCS_GITHUB_TOKEN }}@github.com/codeenigma/ce-dev-docs.git - git push ci master diff --git a/.github/workflows/ce-dev-publish-docs.yml b/.github/workflows/ce-dev-publish-docs.yml new file mode 100644 index 0000000..882fd8b --- /dev/null +++ b/.github/workflows/ce-dev-publish-docs.yml @@ -0,0 +1,50 @@ +name: Publish docs + +# Run this workflow on push to 1.x (e.g. on merge of PR to 1.x) +on: + push: + branches: + - 1.x + +jobs: + # Set the job key. The key is displayed as the job name + # when a job name is not provided + run-tests: + # Name the Job + name: Publish documentation + # Set the type of machine to run on + runs-on: ubuntu-20.04 + + steps: + # Configures global Git variables for committing + - name: Configure Git + run: | + git config --global user.email "sysadm@codeenigma.com" + git config --global user.name "Code Enigma CI" + # Installs the ce-dev stack + - name: Install ce-dev + run: | + cd /tmp + wget https://golang.org/dl/go1.15.8.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf go1.15.8.linux-amd64.tar.gz + export PATH=$PATH:/usr/local/go/bin + git clone https://github.com/FiloSottile/mkcert && cd mkcert + go build -ldflags "-X main.Version=$(git describe --tags)" + sudo mv ./mkcert /usr/local/bin && cd ../ + sudo chmod +x /usr/local/bin/mkcert + rm -Rf mkcert + curl -sL https://raw.githubusercontent.com/codeenigma/ce-dev/1.x/install.sh | /bin/sh -s -- linux + # Uses the ce-dev stack to run Hugo to format and deploy the docs + - name: Publish documentation + run: | + cd + git clone https://github.com/codeenigma/wikis2pages.git + cd wikis2pages + /bin/bash init.sh https://${{ secrets.GITHUB_TOKEN }}@github.com/codeenigma/ce-dev.git 1.x + /bin/sh set-current.sh ce-dev-1.x + docker exec --user ce-dev --workdir /home/ce-dev/deploy/live.local wikis2pages-hugo hugo + /bin/sh .github-actions-push.sh + cd /home/runner/wikis2pages/public/ce-dev-1.x + git remote add ci https://${{ secrets.DOCS_GITHUB_TOKEN }}@github.com/codeenigma/ce-dev-docs.git + git push ci master + shell: bash diff --git a/.github/workflows/ce-provision-build-docs.yml b/.github/workflows/ce-provision-build-docs.yml new file mode 100644 index 0000000..bbd1c64 --- /dev/null +++ b/.github/workflows/ce-provision-build-docs.yml @@ -0,0 +1,48 @@ +name: Build docs + +# Run this workflow every time a new commit pushed to your repository +on: pull_request + +jobs: + # Set the job key. The key is displayed as the job name + # when a job name is not provided + build-docs: + # Name the Job + name: Build the documentation + # Set the type of machine to run on + runs-on: ubuntu-20.04 + + steps: + # Checks out a copy of your repository on the ubuntu-latest machine + - name: Checkout code + if: ${{ github.event.pull_request.head.ref != 'documentation' }} + uses: actions/checkout@v2 + + # Configures global Git variables for committing + - name: Configure Git + run: | + git config --global user.email "sysadm@codeenigma.com" + git config --global user.name "Code Enigma CI" + + # Builds the docs + - name: Build documentation + if: ${{ github.event.pull_request.head.ref != 'documentation' }} + run: | + git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} + git fetch + git checkout documentation + contribute/toc.sh + git add docs + git diff --quiet && git diff --staged --quiet || git commit -am 'GitHub Actions - Rebuilt documentation.' && git push origin documentation + shell: bash + + # Create docs pull request + - name: Create a documentation pull request + if: ${{ github.event.pull_request.head.ref != 'documentation' && github.event.pull_request.base.ref == '1.x' }} + uses: devops-infra/action-pull-request@v0.4.2 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + source_branch: documentation + target_branch: ${{ github.event.pull_request.base.ref }} + title: Documentation update. + body: "**Automated pull request** created by GitHub Actions because of a documentation update." diff --git a/RELEASE b/RELEASE index 795c546..b1aff8c 100644 --- a/RELEASE +++ b/RELEASE @@ -1,2 +1,2 @@ -1.1.16 -Release to repackage ce-provision with latest Ansible Galaxy roles and other ce-provision changes. +1.1.17 +Release to repackage ce-dev to force d8 compatible drush version. diff --git a/contribute/toc.sh b/contribute/toc.sh new file mode 100755 index 0000000..face006 --- /dev/null +++ b/contribute/toc.sh @@ -0,0 +1,140 @@ +#!/bin/sh +# shellcheck disable=SC2094 +# shellcheck disable=SC2129 +IFS=$(printf '\n\t') +set -e +OWN_DIR=$(dirname "$0") +cd "$OWN_DIR" || exit 1 +OWN_DIR=$(git rev-parse --show-toplevel) +cd "$OWN_DIR" || exit 1 +OWN_DIR=$(pwd -P) + +# @param +# $1 string filepath +cp_role_page(){ + RELATIVE=$(realpath --relative-to="$OWN_DIR" "$(dirname "$1")") + if [ ! -d "$OWN_DIR/docs/$RELATIVE" ]; then + mkdir -p "$OWN_DIR/docs/$RELATIVE" + fi + cp "$1" "$OWN_DIR/docs/$RELATIVE.md" +} + +# @param +# $1 string folder +cp_single_page(){ + if [ ! -d "$OWN_DIR/docs/$1" ]; then + mkdir "$OWN_DIR/docs/$1" + fi + cp "$OWN_DIR/$1/README.md" "$OWN_DIR/docs/$1.md" +} + +# @param +# $1 (string) filename +parse_role_variables(){ + TMP_MD=$(mktemp) + WRITE=1 + # Ensure we have a trailing line. + echo "" >> "$1" + while read -r LINE; do + case $LINE in + '') + echo "$LINE" >> "$TMP_MD" + generate_role_variables "$1" + WRITE=0 + ;; + '') + echo "$LINE" >> "$TMP_MD" + WRITE=1 + ;; + '') + echo "$LINE" >> "$TMP_MD" + WRITE=0 + ;; + '') + echo "$LINE" >> "$TMP_MD" + WRITE=1 + ;; + *) + if [ $WRITE = 1 ]; then + echo "$LINE" >> "$TMP_MD" + fi + ;; + esac + done < "$1" + printf '%s\n' "$(cat "$TMP_MD")" > "$1" + rm "$TMP_MD" +} + +# @param +# $1 (string) filename +generate_role_variables(){ + VAR_FILE="$(dirname "$1")/defaults/main.yml" + if [ -f "$VAR_FILE" ]; then + echo "## Default variables" >> "$TMP_MD" + echo '```yaml' >> "$TMP_MD" + cat "$VAR_FILE" >> "$TMP_MD" + echo "" >> "$TMP_MD" + echo '```' >> "$TMP_MD" + echo "" >> "$TMP_MD" + fi +} + +generate_roles_toc(){ + TMP_SIDEBAR=$(mktemp) + WRITE="true" + while read -r LINE; do + case $LINE in + " - [Roles](roles)") + echo "$LINE" >> "$TMP_SIDEBAR" + parse_roles_toc roles 2 + WRITE="false" + ;; + " -"*) + WRITE="true" + echo "$LINE" >> "$TMP_SIDEBAR" + ;; + *) + if [ "$WRITE" = "true" ]; then + echo "$LINE" >> "$TMP_SIDEBAR" + fi + ;; + esac + done < "$OWN_DIR/docs/_Sidebar.md" + mv "$TMP_SIDEBAR" "$OWN_DIR/docs/_Sidebar.md" +} + +parse_roles_toc(){ + ROLES=$(find "$OWN_DIR/$1" -mindepth 2 -maxdepth 2 -name "README.md" | sort) + for ROLE in $ROLES; do + WRITE="true" + INDENT=$(printf %$(($2 * 2))s) + RELATIVE=$(realpath --relative-to="$OWN_DIR" "$(dirname "$ROLE")") + while read -r LINE; do + case $LINE in + "# "*) + if [ "$WRITE" = "true" ]; then + TITLE=$(echo "$LINE" | cut -c 3-) + echo "$INDENT"" - [$TITLE](/$RELATIVE)" >> "$TMP_SIDEBAR" + WRITE="false" + fi + ;; + esac + done < "$ROLE" + parse_roles_toc "$RELATIVE" $(($2 + 1)) + done +} + +rm -rf "$OWN_DIR/docs/roles" +ROLE_PAGES=$(find "$OWN_DIR/roles" -name "README.md") +for ROLE_PAGE in $ROLE_PAGES; do + parse_role_variables "$ROLE_PAGE" +done +for ROLE_PAGE in $ROLE_PAGES; do + cp_role_page "$ROLE_PAGE" +done +generate_roles_toc + + +cp_single_page install +cp_single_page contribute +cp_single_page scripts \ No newline at end of file diff --git a/docs/GettingStarted.md b/docs/GettingStarted.md index dc2b2f7..7e7caf8 100644 --- a/docs/GettingStarted.md +++ b/docs/GettingStarted.md @@ -69,4 +69,4 @@ That should open https://www.hello.local in a new browser's tab, with a fresh Dr ``` ce-dev shell ``` -Will open a shell in the 'web' container. You can then `cd ~/deploy/live.local` and run a `drush uli` to grab a login link. +Will open a shell in the 'web' container. You can then `cd ~/deploy/live.local` and run a `vendor/drush/drush/drush uli` to grab a login link. diff --git a/docs/Troubleshooting.md b/docs/Troubleshooting.md index 38291c2..147f0b4 100644 --- a/docs/Troubleshooting.md +++ b/docs/Troubleshooting.md @@ -5,3 +5,42 @@ Changes in files on your host not being reflected in the container(s) can have a If your files are not updating you should check the [maximum permitted `inotify` watchers](install#inotify-watcher-limit). ### Text editor The way some editors behave on save means the inumber of the file does not change, so unison does not pick up a difference and the files in your containers do not update. Notable culprits are `vim` and `Atom`. In both cases there are fixes - for example the `local-history` plugin for `Atom` forces it to behave as we need. If you have mysterious issues with files not changing in your containers and it isn't the `inotify` watcher limit above, check how your editor behaves. + +## Cgroup Issues +If your ce-dev is failing to even start the controller then you'll see a response that looks like this. +``` +Creating ce_dev_controller ... done +Ensure user UID match those on the host... +Ensure user UID match those on the host... ! + Error: Command failed: sudo docker exec ce_dev_controller /bin/sh /opt/ce-dev-ownership.sh 1000 1000 +``` +There will be very little in the way of logs or errors from this. Just an indication of a problem. + +It turns out that if you are using Ubuntu 21.10 (or POP! OS) then it will be using kernelstub and not grub. This might create incompatabilities between docker and cgroup version 2. To fix this you need to run the following commands. + +``` +sudo kernelstub -a "systemd.unified_cgroup_hierarchy=0" +sudo update-initramfs -c -k all +``` + +They will take a while to run (about 10 minutes), but once complete reboot your machine and delete any created containers that velong to the ce_dev image. When you rebuild the ce-dev controller (by running any command) it should create fine. + +## VM Networking issue +If you're running ce-dev from within a Virtual Machine (eg. KVM/qemu), Docker container network ports are only 'exposed' to the hypervisor (ie the VM), and are not published for external access. +In order to access sites/files deployed by ce-dev, the ports needs to be published so that the Docker containers can be accessed from your workstation. +After running ```ce-dev init``` (before ```ce-dev start```) edit the ~/project/ce-dev/docker-compose.yml + +Replace; +``` + expose: + - 443 + - 80 + - '22' +``` +With; +``` + ports: + - '443:443' + - '80:80' + - '22' +``` diff --git a/package.json b/package.json index 953498a..0546524 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ce-dev", "description": "Local Stack wrapper tool", - "version": "1.1.16", + "version": "1.1.17", "author": " @pm98zz-c", "bin": { "ce-dev": "./bin/run"