Refactor to allow multiple domains via environment variables #6 #19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Test | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| env: | |
| DOMAIN: sslproxy.stackpop.com | |
| HTTP_PORT: 9080 | |
| HTTPS_PORT: 9443 | |
| UPSTREAM_URL: http://host.docker.internal:3000 | |
| jobs: | |
| test: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Start mock upstream | |
| run: | | |
| docker run -d --name upstream -p 3000:80 nginx:alpine | |
| sleep 2 | |
| - name: Create env file | |
| run: | | |
| echo "DOMAIN=${{ env.DOMAIN }}" > .env.${{ env.DOMAIN }} | |
| echo "HTTP_PORT=${{ env.HTTP_PORT }}" >> .env.${{ env.DOMAIN }} | |
| echo "HTTPS_PORT=${{ env.HTTPS_PORT }}" >> .env.${{ env.DOMAIN }} | |
| echo "UPSTREAM_URL=${{ env.UPSTREAM_URL }}" >> .env.${{ env.DOMAIN }} | |
| - name: Add test domain to hosts | |
| run: echo "127.0.0.1 ${{ env.DOMAIN }}" | sudo tee -a /etc/hosts | |
| - name: Build images | |
| run: docker compose --env-file .env.${{ env.DOMAIN }} build | |
| - name: Generate certificates | |
| run: docker compose --env-file .env.${{ env.DOMAIN }} --profile setup run --rm mkcert | |
| - name: Verify certificates exist | |
| run: | | |
| test -f certs/${{ env.DOMAIN }}.pem | |
| test -f certs/${{ env.DOMAIN }}.key.pem | |
| test -f certs/${{ env.DOMAIN }}.rootCA.pem | |
| - name: Start proxy | |
| run: docker compose --env-file .env.${{ env.DOMAIN }} up -d | |
| - name: Wait for Caddy to start | |
| run: sleep 3 | |
| - name: Check Caddy is running | |
| run: docker compose --env-file .env.${{ env.DOMAIN }} ps --status running --services | grep -q '^caddy$' | |
| - name: Test HTTP redirect | |
| run: | | |
| curl -s -o /dev/null -w "%{http_code}" http://${{ env.DOMAIN }}:${{ env.HTTP_PORT }} | grep -q "301\|308" | |
| - name: Test HTTPS proxies to upstream | |
| run: | | |
| curl -s --cacert certs/${{ env.DOMAIN }}.rootCA.pem https://${{ env.DOMAIN }}:${{ env.HTTPS_PORT }} | grep -q "nginx" | |
| - name: Show logs on failure | |
| if: failure() | |
| run: docker compose --env-file .env.${{ env.DOMAIN }} logs | |
| - name: Stop proxy | |
| if: always() | |
| run: | | |
| docker compose --env-file .env.${{ env.DOMAIN }} down | |
| docker rm -f upstream || true |