Skip to content

Refactor to allow multiple domains via environment variables #6 #19

Refactor to allow multiple domains via environment variables #6

Refactor to allow multiple domains via environment variables #6 #19

Workflow file for this run

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