Keep shared edge deployment isolated
Some checks are pending
Quality / full-local-gates (push) Waiting to run
Some checks are pending
Quality / full-local-gates (push) Waiting to run
This commit is contained in:
parent
209da8fb61
commit
a7412c65b5
|
|
@ -132,6 +132,9 @@ Start/update test first and run the complete browser/API/Android verification.
|
||||||
Only then check out that exact tested SHA in production. Start the shared edge
|
Only then check out that exact tested SHA in production. Start the shared edge
|
||||||
from the production checkout with `./scripts/edge-up.sh .env`; start the
|
from the production checkout with `./scripts/edge-up.sh .env`; start the
|
||||||
production application separately with `./scripts/deploy-up.sh .env`.
|
production application separately with `./scripts/deploy-up.sh .env`.
|
||||||
|
`edge-up.sh` explicitly selects `EDGE_COMPOSE_PROJECT_NAME`, so the shared
|
||||||
|
proxy remains independent from both application Compose projects even though
|
||||||
|
the same production `.env` also contains `COMPOSE_PROJECT_NAME`.
|
||||||
|
|
||||||
The authoritative A records for `whoneedhelp.com`, `www.whoneedhelp.com`, and
|
The authoritative A records for `whoneedhelp.com`, `www.whoneedhelp.com`, and
|
||||||
`test.whoneedhelp.com` must point to the verified server address before Caddy
|
`test.whoneedhelp.com` must point to the verified server address before Caddy
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,15 @@ fi
|
||||||
|
|
||||||
"$ROOT/scripts/validate-edge-env.sh" "$env_file"
|
"$ROOT/scripts/validate-edge-env.sh" "$env_file"
|
||||||
|
|
||||||
|
edge_compose_project_name=$(awk '
|
||||||
|
index($0, "EDGE_COMPOSE_PROJECT_NAME=") == 1 {
|
||||||
|
print substr($0, length("EDGE_COMPOSE_PROJECT_NAME=") + 1)
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
' "$env_file")
|
||||||
|
|
||||||
exec docker compose \
|
exec docker compose \
|
||||||
|
--project-name "$edge_compose_project_name" \
|
||||||
--project-directory "$ROOT" \
|
--project-directory "$ROOT" \
|
||||||
--env-file "$env_file" \
|
--env-file "$env_file" \
|
||||||
--file "$ROOT/compose.edge.yaml" \
|
--file "$ROOT/compose.edge.yaml" \
|
||||||
|
|
|
||||||
|
|
@ -323,9 +323,11 @@ if ./scripts/validate-production-env.sh \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Rendering every Docker Compose profile"
|
echo "Rendering every Docker Compose profile"
|
||||||
docker compose --project-directory "$ROOT" --env-file "$production_env" \
|
docker compose --project-name who_need_help_edge \
|
||||||
|
--project-directory "$ROOT" --env-file "$production_env" \
|
||||||
--file compose.edge.yaml config --format json |
|
--file compose.edge.yaml config --format json |
|
||||||
jq --exit-status '
|
jq --exit-status '
|
||||||
|
.name == "who_need_help_edge" and
|
||||||
(.services.edge.image | startswith("who-need-help:caddy-production-")) and
|
(.services.edge.image | startswith("who-need-help:caddy-production-")) and
|
||||||
.services.edge.user == "1000:1000" and
|
.services.edge.user == "1000:1000" and
|
||||||
.services.edge.read_only == true and
|
.services.edge.read_only == true and
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,7 @@ validate_upstream TEST_UPSTREAM "$test_upstream"
|
||||||
}
|
}
|
||||||
|
|
||||||
docker compose \
|
docker compose \
|
||||||
|
--project-name "$compose_project_name" \
|
||||||
--project-directory "$ROOT" \
|
--project-directory "$ROOT" \
|
||||||
--env-file "$env_file" \
|
--env-file "$env_file" \
|
||||||
--file "$ROOT/compose.edge.yaml" \
|
--file "$ROOT/compose.edge.yaml" \
|
||||||
|
|
|
||||||
|
|
@ -22,14 +22,32 @@ defmodule WhoNeedHelp.SupportAndContentRemovalTest do
|
||||||
assert request.contact_email == "person@example.com"
|
assert request.contact_email == "person@example.com"
|
||||||
assert is_nil(request.contact_verified_at)
|
assert is_nil(request.contact_verified_at)
|
||||||
|
|
||||||
|
test_pid = self()
|
||||||
|
|
||||||
assert_email_sent(fn email ->
|
assert_email_sent(fn email ->
|
||||||
email.subject =~ request.reference and email.text_body =~ Support.status_url(request)
|
matches_request =
|
||||||
|
email.subject =~ request.reference and
|
||||||
|
email.text_body =~ "/support/cases/#{request.id}?token="
|
||||||
|
|
||||||
|
if matches_request, do: send(test_pid, {:support_acknowledgement, email})
|
||||||
|
matches_request
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
assert_receive {:support_acknowledgement, email}
|
||||||
|
|
||||||
|
[status_url] =
|
||||||
|
Regex.run(
|
||||||
|
~r{https?://[^\s]+/support/cases/#{Regex.escape(request.id)}\?token=[^\s]+},
|
||||||
|
email.text_body
|
||||||
|
)
|
||||||
|
|
||||||
|
emailed_token =
|
||||||
|
status_url |> URI.parse() |> Map.fetch!(:query) |> URI.decode_query() |> Map.fetch!("token")
|
||||||
|
|
||||||
assert {:error, :not_found} = Support.get_by_access_token(request.id, "invalid")
|
assert {:error, :not_found} = Support.get_by_access_token(request.id, "invalid")
|
||||||
|
|
||||||
assert {:ok, verified} =
|
assert {:ok, verified} =
|
||||||
Support.get_by_access_token(request.id, Support.access_token(request))
|
Support.get_by_access_token(request.id, emailed_token)
|
||||||
|
|
||||||
assert verified.contact_verified_at
|
assert verified.contact_verified_at
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user