diff --git a/.github/workflows/build_and_publish.yml b/.github/workflows/build_and_publish.yml deleted file mode 100644 index 1dbdf36..0000000 --- a/.github/workflows/build_and_publish.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: Build & Publish -on: - push: - branches: - - "main" - - "dev" - tags: - - 'v*.*.*' - pull_request: - branches: - - 'main' - -jobs: - docker: - runs-on: ubuntu-latest - steps: - - - name: Checkout - uses: actions/checkout@v4 - - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - # list of Docker images to use as base name for tags - images: | - ${{ github.repository_owner }}/haproxy - ghcr.io/${{ github.repository_owner }}/haproxy - labels: | - org.opencontainers.image.authors=the pygmy stack, The HAProxy Community (HAProxy) - org.opencontainers.image.description=dnsmasq DNS proxy, configured for use with the pygmy stack - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to DockerHub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Login to GHCR - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: . - platforms: linux/amd64,linux/arm64 - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml new file mode 100644 index 0000000..29b52da --- /dev/null +++ b/.github/workflows/build_and_test.yml @@ -0,0 +1,213 @@ +name: Build & Publish +on: + push: + branches: + - "main" + - "dev" + tags: + - 'v*.*.*' + pull_request: + branches: + - 'main' + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + # list of Docker images to use as base name for tags + images: | + ${{ github.repository_owner }}/haproxy + ghcr.io/${{ github.repository_owner }}/haproxy + labels: | + org.opencontainers.image.authors=the pygmy stack, The HAProxy Community (HAProxy) + org.opencontainers.image.description=dnsmasq DNS proxy, configured for use with the pygmy stack + - + name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - + name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - + name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - + name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + test: + needs: docker + runs-on: ubuntu-22.04 + steps: + - + uses: actions/checkout@v4 + # Establish some SSH keys. + - + name: Setup SSH + run: | + eval $(ssh-agent); + ssh-keygen -t rsa -q -f "$HOME/.ssh/id_rsa" -N ""; + ssh-keygen -t rsa -q -f "$HOME/.ssh/id_pwd" -N "passphrase"; + ssh-add; + ssh-add -l; + - + name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + # list of Docker images to use as base name for tags + images: | + ghcr.io/${{ github.repository_owner }}/haproxy + - + name: Find and Replace + uses: jacobtomlinson/gha-find-replace@v3 + with: + find: "ghcr.io/pygmystack/haproxy:main" + replace: ${{ steps.meta.outputs.tags }} + include: "examples/**" + - + name: Show changes + run: | + grep -n ghcr examples/* + - + name: Install pygmy and dockerize via brew + run: | + eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"; + brew tap pygmystack/pygmy; + brew install pygmy; + brew install dockerize; + echo "/home/linuxbrew/.linuxbrew/bin" >> $GITHUB_PATH; + - + name: Basic test + run: | + pygmy --config examples/pygmy.basic.yml pull; + pygmy --config examples/pygmy.basic.yml status; + pygmy --config examples/pygmy.basic.yml up; + pygmy --config examples/pygmy.basic.yml status; + pygmy --config examples/pygmy.basic.yml version; + - + name: Show pygmy image versions + run: | + docker ps -a --filter "label=pygmy.name" + - + name: Export configuration + run: pygmy --config examples/pygmy.basic.yml export -o ./exported-config.yml + - + name: Show configuration + run: cat ./exported-config.yml +# - +# name: SSH Key test +# run: | +# pygmy addkey /home/runner/.ssh/id_rsa.pub; +# pygmy status; +# pygmy status | grep 'id_rsa'; +# docker run --rm -i --volumes-from amazeeio-ssh-agent uselagoon/php-7.4-cli /usr/bin/ssh-add -l | grep 'id_rsa'; + - + name: Resolv file test + run: | + stat /usr/lib/systemd/resolved.conf.d/docker.amazee.io.conf; + grep "127.0.0.1" /usr/lib/systemd/resolved.conf.d/docker.amazee.io.conf; + grep "docker.amazee.io" /usr/lib/systemd/resolved.conf.d/docker.amazee.io.conf; + - + name: Test the amazeeio-network for expected results + run: | + docker network inspect amazeeio-network | jq '.[].Name' | grep "amazeeio-network"; + docker network inspect amazeeio-network | jq '.[].Containers' | jq '.[].Name' | grep "amazeeio-haproxy"; + docker network inspect amazeeio-network | jq '.[].Containers' | jq '.[].Name' | grep "amazeeio-mailhog"; + docker network inspect amazeeio-network | jq '.[].Containers' | jq '.[].Name' | grep "amazeeio-portainer"; + docker network inspect amazeeio-network | jq '.[].Containers' | jq '.[].IPv4Address'; + docker network inspect amazeeio-network | jq '.[].Containers' | jq '.[].IPv4Address' | grep "10.99.99."; + - + name: Test for configured container tags. + run: | + docker inspect amazeeio-dnsmasq | jq '.[].Config.Labels["pygmy.hocuspocus"]' | grep "42"; + docker inspect amazeeio-dnsmasq | jq '.[].Config.Labels["pygmy.abracadabra"]' | grep "1"; + docker inspect amazeeio-dnsmasq | jq '.[].Config.Labels["pygmy.opensesame"]' | grep "correct"; + docker inspect amazeeio-haproxy | jq '.[].Config.Labels["pygmy.hocuspocus"]' | grep "42"; + docker inspect amazeeio-haproxy | jq '.[].Config.Labels["pygmy.abracadabra"]' | grep "1"; + docker inspect amazeeio-haproxy | jq '.[].Config.Labels["pygmy.opensesame"]' | grep "correct"; + docker inspect amazeeio-portainer | jq '.[].Config.Labels["pygmy.hocuspocus"]' | grep "42"; + docker inspect amazeeio-portainer | jq '.[].Config.Labels["pygmy.abracadabra"]' | grep "1"; + docker inspect amazeeio-portainer | jq '.[].Config.Labels["pygmy.opensesame"]' | grep "correct"; + docker inspect amazeeio-ssh-agent | jq '.[].Config.Labels["pygmy.hocuspocus"]' | grep "42"; + docker inspect amazeeio-ssh-agent | jq '.[].Config.Labels["pygmy.abracadabra"]' | grep "1"; + docker inspect amazeeio-ssh-agent | jq '.[].Config.Labels["pygmy.opensesame"]' | grep "correct"; + docker inspect amazeeio-mailhog | jq '.[].Config.Labels["pygmy.hocuspocus"]' | grep "42"; + docker inspect amazeeio-mailhog | jq '.[].Config.Labels["pygmy.abracadabra"]' | grep "1"; + docker inspect amazeeio-mailhog | jq '.[].Config.Labels["pygmy.opensesame"]' | grep "correct"; + - + name: Cowsay test + run: pygmy --config examples/pygmy.basic.yml up | grep 'holy ship' || true; + - + name: Test the container image overrides configuration + run: | + echo "Checking image references in started containers..."; + docker container inspect amazeeio-haproxy | jq '.[].Config.Image' | grep '${{ steps.meta.outputs.tags }}'; + pygmy --config examples/pygmy.basic.yml clean; + pygmy --config examples/pygmy.yml up; + echo "Checking image references in started containers..."; + docker container inspect amazeeio-haproxy | jq '.[].Config.Image' | grep '${{ steps.meta.outputs.tags }}'; + - + name: Clone the official examples + run: | + git clone --recurse-submodules https://github.com/uselagoon/lagoon-examples.git + - + name: "[Example] Drupal Base" + run: | + cd lagoon-examples/drupal-base; + docker-compose -p drupal-base up -d; + docker-compose -p drupal-base exec -T cli composer install; + dockerize -wait http://drupal-base.docker.amazee.io:80 -timeout 10s; + curl --HEAD http://drupal-base.docker.amazee.io; + curl --HEAD http://drupal-base.docker.amazee.io | grep -i "x-lagoon"; + pygmy --config examples/pygmy.yml status | grep '\- http://drupal-base.docker.amazee.io'; + docker-compose -p drupal-base down; + docker-compose -p drupal-base rm; + cd ../../; + - + name: Test the stop command + run: | + pygmy --config examples/pygmy.yml down | grep 'Successfully removed amazeeio'; + pygmy --config examples/pygmy.yml status | grep '\[ \] amazeeio-' | grep 'is not running'; + pygmy --config examples/pygmy.yml status | grep 'Running as container amazeeio-' && false || true; + pygmy --config examples/pygmy.yml up; + pygmy --config examples/pygmy.yml status | grep 'Running as container amazeeio-' && true || false; + - + name: Test the down command + run: | + pygmy --config examples/pygmy.yml stop | grep 'Successfully stopped amazeeio'; + pygmy --config examples/pygmy.yml status | grep '\[ \] amazeeio-' | grep 'is not running'; + pygmy --config examples/pygmy.yml status | grep 'Running as container amazeeio-' && false || true; + pygmy --config examples/pygmy.yml up; + pygmy --config examples/pygmy.yml status | grep 'Running as container amazeeio-' && true || false; + - + name: Cleanup pygmy + run: pygmy clean; + - + name: Cleanup after tests. + run: | + docker system prune --all --force + docker volume prune --force diff --git a/examples/pygmy.basic.yml b/examples/pygmy.basic.yml new file mode 100644 index 0000000..0ccb7aa --- /dev/null +++ b/examples/pygmy.basic.yml @@ -0,0 +1,82 @@ +services: + + amazeeio-dnsmasq: + Config: + Labels: + - pygmy.hocuspocus: 42 + - pygmy.abracadabra: true + - pygmy.opensesame: correct + + amazeeio-haproxy: + image: ghcr.io/pygmystack/haproxy:main + Config: + Labels: + - pygmy.hocuspocus: 42 + - pygmy.abracadabra: true + - pygmy.opensesame: correct + + amazeeio-mailhog: + Config: + Labels: + - pygmy.hocuspocus: 42 + - pygmy.abracadabra: true + - pygmy.opensesame: correct + + amazeeio-ssh-agent: + Config: + Labels: + - pygmy.hocuspocus: 42 + - pygmy.abracadabra: true + - pygmy.opensesame: correct + + amazeeio-ssh-agent-add-key: + Config: + Labels: + - pygmy.enable: false + + amazeeio-portainer: + Config: + Image: portainer/portainer + Env: + - "AMAZEEIO=AMAZEEIO" + - "AMAZEEIO_URL=portainer.docker.amazee.io" + - "AMAZEEIO_HTTP_PORT=9000" + Labels: + - pygmy.enable: true + - pygmy.name: amazeeio-portainer + - pygmy.network: amazeeio-network + - pygmy.weight: 23 + - pygmy.url: http://portainer.docker.amazee.io + - pygmy.hocuspocus: 42 + - pygmy.abracadabra: true + - pygmy.opensesame: correct + ExposedPorts: + 9000/tcp: {} + HostConfig: + Binds: + - /var/run/docker.sock:/var/run/docker.sock + - portainer_data:/data + PortBindings: + 8000/tcp: + - HostPort: 8200 + 9000/tcp: + - HostPort: 8100 + + pygmy-cowsay: + Config: + Image: mbentley/cowsay + Cmd: + - holy + - ship + Labels: + - pygmy.enable: true + - pygmy.discrete: false + - pygmy.name: pygmy-cowsay + - pygmy.output: true + - pygmy.weight: 99 + HostConfig: + AutoRemove: true + +volumes: + portainer_data: + Name: portainer_data diff --git a/examples/pygmy.yml b/examples/pygmy.yml new file mode 100644 index 0000000..71778d2 --- /dev/null +++ b/examples/pygmy.yml @@ -0,0 +1,3 @@ +services: + amazeeio-haproxy: + image: ghcr.io/pygmystack/haproxy:main