From 7f1e845c4383a645c758438df85c8b7d8cd83a6d Mon Sep 17 00:00:00 2001 From: amalshaji Date: Sat, 30 Mar 2024 22:06:44 +0530 Subject: [PATCH 01/12] e2e tests --- .github/workflows/tunnel-tests.yml | 85 +++++++++++++++++++ docker-compose.dev.yaml | 25 ++++-- e2e/.gitignore | 10 +++ e2e/.python-version | 1 + e2e/Makefile | 2 + e2e/client.e2e.yaml | 12 +++ e2e/portr_e2e.sql | 132 +++++++++++++++++++++++++++++ e2e/requirements.txt | 4 + e2e/server.py | 13 +++ e2e/test_server.py | 7 ++ 10 files changed, 285 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/tunnel-tests.yml create mode 100644 e2e/.gitignore create mode 100644 e2e/.python-version create mode 100644 e2e/Makefile create mode 100644 e2e/client.e2e.yaml create mode 100644 e2e/portr_e2e.sql create mode 100644 e2e/requirements.txt create mode 100644 e2e/server.py create mode 100644 e2e/test_server.py diff --git a/.github/workflows/tunnel-tests.yml b/.github/workflows/tunnel-tests.yml new file mode 100644 index 00000000..cce16cc1 --- /dev/null +++ b/.github/workflows/tunnel-tests.yml @@ -0,0 +1,85 @@ +# This workflow will build a golang project +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go + +name: Tunnel tests + +on: + push: + branches: ["main"] + paths: + - "admin/**" + - "tunnel/**" + pull_request: + branches: ["main"] + paths: + - "admin/**" + - "tunnel/**" + +permissions: + contents: read + +env: + PORTR_DB_URL: "postgres://postgres:postgres@postgres:5432/postgres" + PORTR_DOMAIN: localhost:8000 + PORTR_ADMIN_GITHUB_CLIENT_ID: "" + PORTR_ADMIN_GITHUB_CLIENT_SECRET: "" + PORTR_SERVER_URL: localhost:8000 + PORTR_SSH_URL: localhost:2222 + PORTR_TUNNEL_USE_LOCALHOST: true + PORTR_ADMIN_ENCRYPTION_KEY: "mj-qoeMhLQp_cHnMU9nsLfCMnNkZ6XBcFefy4VxzOe8=" + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: postgres + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Start the services + run: | + docker-compose -f docker-compose.test.yml up -d + sleep 5 + + - name: Set up Python 3.12 + uses: actions/setup-python@v3 + with: + python-version: "3.12" + cache: "pip" + cache-dependency-path: e2e/requirements.txt + + - name: Setup test server + working-directory: ./e2e + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + + - name: Start test server + working-directory: ./e2e + run: | + uvicorn server:app --host 0.0.0.0 --port 9000 & + sleep 3 + + - name: Build portr binary + working-directory: ./tunnel + run: | + go build -ldflags="-s -w" -o ../e2e/portr cmd/portr/*.go + + - name: Start the tunnel + working-directory: ./e2e + run: | + ./portr --config client.e2e.yaml http 9000 --subdomain test-tunnel-server & + sleep 3 + + - name: Setup test data + run: | + make load-pg-data + + - name: Add hosts to /etc/hosts + run: | + sudo echo "127.0.0.1 test-tunnel-server.localhost" | sudo tee -a /etc/hosts + + - name: Run tests + run: | + python test_server.py diff --git a/docker-compose.dev.yaml b/docker-compose.dev.yaml index 5a34d2d1..4799e73b 100644 --- a/docker-compose.dev.yaml +++ b/docker-compose.dev.yaml @@ -5,8 +5,14 @@ services: ports: - 8000:8000 depends_on: - - postgres + postgres: + condition: service_healthy env_file: .env + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000/api/v1/healthcheck"] + interval: 10s + timeout: 5s + retries: 5 tunnel: build: @@ -16,20 +22,27 @@ services: - 2222:2222 - 8001:8001 depends_on: - - admin - - postgres + admin: + condition: service_healthy + postgres: + condition: service_healthy env_file: .env postgres: image: postgres:16.2 environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: postgres + POSTGRES_USER: $POSTGRES_USER + POSTGRES_PASSWORD: $POSTGRES_PASSWORD + POSTGRES_DB: $POSTGRES_DB ports: - 5432:5432 volumes: - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $POSTGRES_USER"] + interval: 10s + timeout: 5s + retries: 5 volumes: postgres_data: {} diff --git a/e2e/.gitignore b/e2e/.gitignore new file mode 100644 index 00000000..b2546d8f --- /dev/null +++ b/e2e/.gitignore @@ -0,0 +1,10 @@ +# python generated files +__pycache__/ +*.py[oc] +build/ +dist/ +wheels/ +*.egg-info + +# venv +.venv \ No newline at end of file diff --git a/e2e/.python-version b/e2e/.python-version new file mode 100644 index 00000000..171a6a93 --- /dev/null +++ b/e2e/.python-version @@ -0,0 +1 @@ +3.12.1 diff --git a/e2e/Makefile b/e2e/Makefile new file mode 100644 index 00000000..780c7db7 --- /dev/null +++ b/e2e/Makefile @@ -0,0 +1,2 @@ +load-pg-data: + docker exec portr-postgres-1 psql -U postgres postgres < ./e2e/portr_e2e.sql diff --git a/e2e/client.e2e.yaml b/e2e/client.e2e.yaml new file mode 100644 index 00000000..b3f0b8cc --- /dev/null +++ b/e2e/client.e2e.yaml @@ -0,0 +1,12 @@ +server_url: localhost:8000 +ssh_url: localhost:2222 +tunnel_url: localhost:8001 +secret_key: portr_gpb2sW2uWmN3TASvzI6PzAmuqem0VrKwc9o7 +use_localhost: true +tunnels: + - name: portr + subdomain: portr + port: 4321 + - name: e2e + subdomain: e2e + port: 8000 diff --git a/e2e/portr_e2e.sql b/e2e/portr_e2e.sql new file mode 100644 index 00000000..3b052bba --- /dev/null +++ b/e2e/portr_e2e.sql @@ -0,0 +1,132 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 16.2 (Debian 16.2-1.pgdg120+2) +-- Dumped by pg_dump version 16.2 (Debian 16.2-1.pgdg120+2) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Data for Name: team; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.team (id, created_at, updated_at, name, slug) FROM stdin; +1 2024-03-30 14:13:32.763932+00 2024-03-30 14:13:32.763961+00 portr portr +\. + + +-- +-- Data for Name: user; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public."user" (id, created_at, updated_at, email, first_name, last_name, is_superuser) FROM stdin; +1 2024-03-30 14:13:28.931274+00 2024-03-30 14:13:28.931326+00 amalshajid@gmail.com \N \N t +\. + + +-- +-- Data for Name: team_users; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.team_users (id, created_at, updated_at, secret_key, role, team_id, user_id) FROM stdin; +1 2024-03-30 14:13:32.766736+00 2024-03-30 14:13:32.766754+00 portr_gpb2sW2uWmN3TASvzI6PzAmuqem0VrKwc9o7 admin 1 1 +\. + + +-- +-- Data for Name: connection; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.connection (created_at, updated_at, id, type, subdomain, port, status, started_at, closed_at, created_by_id, team_id) FROM stdin; +\. + + +-- +-- Data for Name: githubuser; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.githubuser (id, github_id, github_access_token, github_avatar_url, user_id) FROM stdin; +1 18011385 ghu_uverybigrandomstringxB31LvIa https://avatars.githubusercontent.com/u/18011385?v=4 1 +\. + + +-- +-- Data for Name: instancesettings; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.instancesettings (id, created_at, updated_at, smtp_enabled, smtp_host, smtp_port, smtp_username, smtp_password, from_address, add_user_email_subject, add_user_email_body, updated_by_id) FROM stdin; +1 2024-03-30 14:12:43.843191+00 2024-03-30 14:12:43.843204+00 f \N \N \N \N \N You've been added to team {{teamName}} on Portr! Hello {{email}}\n\nYou've been added to team "{{teamName}}" on Portr.\n\nGet started by signing in with your github account at {{dashboardUrl}} \N +\. + + +-- +-- Data for Name: session; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.session (id, created_at, updated_at, token, expires_at, user_id) FROM stdin; +1 2024-03-30 14:13:28.946702+00 2024-03-30 14:13:28.946732+00 XV6ZpcwMnvxuYEkdOTS0mbJIYDyy6Bx6 2024-04-06 14:13:28.945745+00 1 +\. + + +-- +-- Name: aerich_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.aerich_id_seq', 1, true); + + +-- +-- Name: githubuser_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.githubuser_id_seq', 1, true); + + +-- +-- Name: instancesettings_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.instancesettings_id_seq', 1, true); + + +-- +-- Name: session_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.session_id_seq', 1, true); + + +-- +-- Name: team_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.team_id_seq', 1, true); + + +-- +-- Name: team_users_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.team_users_id_seq', 1, true); + + +-- +-- Name: user_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.user_id_seq', 1, true); + + +-- +-- PostgreSQL database dump complete +-- \ No newline at end of file diff --git a/e2e/requirements.txt b/e2e/requirements.txt new file mode 100644 index 00000000..d0476be2 --- /dev/null +++ b/e2e/requirements.txt @@ -0,0 +1,4 @@ +fastapi==0.110.0 +pytest==8.1.1 +uvicorn==0.29.0 +requests==2.31.0 diff --git a/e2e/server.py b/e2e/server.py new file mode 100644 index 00000000..be7dd585 --- /dev/null +++ b/e2e/server.py @@ -0,0 +1,13 @@ +from fastapi import FastAPI +import uvicorn + +app = FastAPI() + + +@app.get("/") +def read_root(): + return {"Hello": "World"} + + +if __name__ == "__main__": + uvicorn.run(app, host="0.0.0.0", port=9000) diff --git a/e2e/test_server.py b/e2e/test_server.py new file mode 100644 index 00000000..1e640773 --- /dev/null +++ b/e2e/test_server.py @@ -0,0 +1,7 @@ +import requests # type: ignore + + +def test_json_api(): + response = requests.get("http://test-tunnel-server.localhost:8001") + assert response.status_code == 200 + assert response.json() == {"Hello": "World"} From 8afb3dfac65d3f73652e570c84a25e3b04f6a24a Mon Sep 17 00:00:00 2001 From: amalshaji Date: Sat, 30 Mar 2024 22:07:52 +0530 Subject: [PATCH 02/12] temp comment --- .github/workflows/tunnel-tests.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/tunnel-tests.yml b/.github/workflows/tunnel-tests.yml index cce16cc1..4136a346 100644 --- a/.github/workflows/tunnel-tests.yml +++ b/.github/workflows/tunnel-tests.yml @@ -6,14 +6,14 @@ name: Tunnel tests on: push: branches: ["main"] - paths: - - "admin/**" - - "tunnel/**" + # paths: + # - "admin/**" + # - "tunnel/**" pull_request: branches: ["main"] - paths: - - "admin/**" - - "tunnel/**" + # paths: + # - "admin/**" + # - "tunnel/**" permissions: contents: read From c6bb8e80253235ee4dd4091da017f26a633c4c2a Mon Sep 17 00:00:00 2001 From: amalshaji Date: Sat, 30 Mar 2024 22:09:57 +0530 Subject: [PATCH 03/12] fix --- .github/workflows/tunnel-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tunnel-tests.yml b/.github/workflows/tunnel-tests.yml index 4136a346..1fa93efa 100644 --- a/.github/workflows/tunnel-tests.yml +++ b/.github/workflows/tunnel-tests.yml @@ -32,14 +32,14 @@ env: POSTGRES_DB: postgres jobs: - build: + run-tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Start the services run: | - docker-compose -f docker-compose.test.yml up -d + docker-compose -f docker-compose.dev.yaml up -d sleep 5 - name: Set up Python 3.12 From 4b29a79173586cbfb7b57bf233d18bc5ff1f02a0 Mon Sep 17 00:00:00 2001 From: amalshaji Date: Sat, 30 Mar 2024 22:11:54 +0530 Subject: [PATCH 04/12] add .env --- .github/workflows/tunnel-tests.yml | 13 ------------- .gitignore | 3 ++- e2e/.env | 11 +++++++++++ 3 files changed, 13 insertions(+), 14 deletions(-) create mode 100644 e2e/.env diff --git a/.github/workflows/tunnel-tests.yml b/.github/workflows/tunnel-tests.yml index 1fa93efa..0ad3d27b 100644 --- a/.github/workflows/tunnel-tests.yml +++ b/.github/workflows/tunnel-tests.yml @@ -18,19 +18,6 @@ on: permissions: contents: read -env: - PORTR_DB_URL: "postgres://postgres:postgres@postgres:5432/postgres" - PORTR_DOMAIN: localhost:8000 - PORTR_ADMIN_GITHUB_CLIENT_ID: "" - PORTR_ADMIN_GITHUB_CLIENT_SECRET: "" - PORTR_SERVER_URL: localhost:8000 - PORTR_SSH_URL: localhost:2222 - PORTR_TUNNEL_USE_LOCALHOST: true - PORTR_ADMIN_ENCRYPTION_KEY: "mj-qoeMhLQp_cHnMU9nsLfCMnNkZ6XBcFefy4VxzOe8=" - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: postgres - jobs: run-tests: runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index 61375e19..8aeba12a 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ node_modules .mypy_cache data/ dist -!tunnel/internal/client/dashboard/dist \ No newline at end of file +!tunnel/internal/client/dashboard/dist +!e2e/.env \ No newline at end of file diff --git a/e2e/.env b/e2e/.env new file mode 100644 index 00000000..af51e820 --- /dev/null +++ b/e2e/.env @@ -0,0 +1,11 @@ +PORTR_DB_URL="postgres://postgres:postgres@postgres:5432/postgres" +PORTR_DOMAIN=localhost:8000 +PORTR_ADMIN_GITHUB_CLIENT_ID="" +PORTR_ADMIN_GITHUB_CLIENT_SECRET="" +PORTR_SERVER_URL=localhost:8000 +PORTR_SSH_URL=localhost:2222 +PORTR_TUNNEL_USE_LOCALHOST=true +PORTR_ADMIN_ENCRYPTION_KEY="mj-qoeMhLQp_cHnMU9nsLfCMnNkZ6XBcFefy4VxzOe8=" +POSTGRES_USER=postgres +POSTGRES_PASSWORD=postgres +POSTGRES_DB=postgres \ No newline at end of file From 7afa3612c0513b18528261fbb7d91c830b3b172c Mon Sep 17 00:00:00 2001 From: amalshaji Date: Sat, 30 Mar 2024 22:12:49 +0530 Subject: [PATCH 05/12] cp env --- .github/workflows/tunnel-tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tunnel-tests.yml b/.github/workflows/tunnel-tests.yml index 0ad3d27b..1fdc38fb 100644 --- a/.github/workflows/tunnel-tests.yml +++ b/.github/workflows/tunnel-tests.yml @@ -26,6 +26,7 @@ jobs: - name: Start the services run: | + cp ./e2e/.env .env docker-compose -f docker-compose.dev.yaml up -d sleep 5 From 7a5ee65792fe9682f53b5d2f78dc18c8e86cc63d Mon Sep 17 00:00:00 2001 From: amalshaji Date: Sat, 30 Mar 2024 22:17:43 +0530 Subject: [PATCH 06/12] build portr inspector --- .github/workflows/tunnel-tests.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tunnel-tests.yml b/.github/workflows/tunnel-tests.yml index 1fdc38fb..cf18ba56 100644 --- a/.github/workflows/tunnel-tests.yml +++ b/.github/workflows/tunnel-tests.yml @@ -19,7 +19,7 @@ permissions: contents: read jobs: - run-tests: + run-tunnel-tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -49,6 +49,18 @@ jobs: uvicorn server:app --host 0.0.0.0 --port 9000 & sleep 3 + - name: Setup client + uses: pnpm/action-setup@v3 + with: + version: 8.7.5 + run_install: false + + - name: Install client dependencies + run: pnpm --dir tunnel/internal/client/dashboard/ui install + + - name: Build client + run: pnpm --dir tunnel/internal/client/dashboard/ui build + - name: Build portr binary working-directory: ./tunnel run: | From ba0db7f847e9e92ea7bfbcc53f713586045b8797 Mon Sep 17 00:00:00 2001 From: amalshaji Date: Sat, 30 Mar 2024 22:23:33 +0530 Subject: [PATCH 07/12] fix load pg data --- .github/workflows/tunnel-tests.yml | 1 + e2e/Makefile | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tunnel-tests.yml b/.github/workflows/tunnel-tests.yml index cf18ba56..6510e0fc 100644 --- a/.github/workflows/tunnel-tests.yml +++ b/.github/workflows/tunnel-tests.yml @@ -73,6 +73,7 @@ jobs: sleep 3 - name: Setup test data + working-directory: ./e2e run: | make load-pg-data diff --git a/e2e/Makefile b/e2e/Makefile index 780c7db7..3c4fda97 100644 --- a/e2e/Makefile +++ b/e2e/Makefile @@ -1,2 +1,2 @@ load-pg-data: - docker exec portr-postgres-1 psql -U postgres postgres < ./e2e/portr_e2e.sql + docker exec portr-postgres-1 psql -U postgres postgres < portr_e2e.sql From 9382621af8cc65e231432b9dc1aa6f9549b7407e Mon Sep 17 00:00:00 2001 From: amalshaji Date: Sun, 31 Mar 2024 08:40:54 +0530 Subject: [PATCH 08/12] add container names --- docker-compose.dev.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker-compose.dev.yaml b/docker-compose.dev.yaml index 4799e73b..3af11bef 100644 --- a/docker-compose.dev.yaml +++ b/docker-compose.dev.yaml @@ -1,5 +1,6 @@ services: admin: + container_name: portr_admin build: context: admin ports: @@ -15,6 +16,7 @@ services: retries: 5 tunnel: + container_name: portr_tunnel build: context: tunnel command: ["start"] @@ -29,6 +31,7 @@ services: env_file: .env postgres: + container_name: portr_postgres image: postgres:16.2 environment: POSTGRES_USER: $POSTGRES_USER From 1a5f12dc9414c5f6e5235de1857833b9b7da8883 Mon Sep 17 00:00:00 2001 From: amalshaji Date: Sun, 31 Mar 2024 09:08:11 +0530 Subject: [PATCH 09/12] fix container name --- e2e/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/Makefile b/e2e/Makefile index 3c4fda97..87bd74f5 100644 --- a/e2e/Makefile +++ b/e2e/Makefile @@ -1,2 +1,2 @@ load-pg-data: - docker exec portr-postgres-1 psql -U postgres postgres < portr_e2e.sql + docker exec portr_postgres psql -U postgres postgres < portr_e2e.sql From 1f21de4409b68176245b23d8aa4afe0b7f94400f Mon Sep 17 00:00:00 2001 From: amalshaji Date: Sun, 31 Mar 2024 09:17:44 +0530 Subject: [PATCH 10/12] fix test directory --- .github/workflows/tunnel-tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tunnel-tests.yml b/.github/workflows/tunnel-tests.yml index 6510e0fc..b1a75248 100644 --- a/.github/workflows/tunnel-tests.yml +++ b/.github/workflows/tunnel-tests.yml @@ -82,5 +82,6 @@ jobs: sudo echo "127.0.0.1 test-tunnel-server.localhost" | sudo tee -a /etc/hosts - name: Run tests + working-directory: ./e2e run: | python test_server.py From fd6ba5e508710c7130df670873d652cf53e80a05 Mon Sep 17 00:00:00 2001 From: amalshaji Date: Sun, 31 Mar 2024 09:36:31 +0530 Subject: [PATCH 11/12] fix test command --- .github/workflows/tunnel-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tunnel-tests.yml b/.github/workflows/tunnel-tests.yml index b1a75248..a67acbea 100644 --- a/.github/workflows/tunnel-tests.yml +++ b/.github/workflows/tunnel-tests.yml @@ -84,4 +84,4 @@ jobs: - name: Run tests working-directory: ./e2e run: | - python test_server.py + pytest From 02fe5b21c984c13ef9218fc61977c1d5aca3813c Mon Sep 17 00:00:00 2001 From: amalshaji Date: Thu, 4 Apr 2024 21:08:00 +0530 Subject: [PATCH 12/12] fix --- .github/workflows/tunnel-tests.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/tunnel-tests.yml b/.github/workflows/tunnel-tests.yml index a67acbea..eb75e97e 100644 --- a/.github/workflows/tunnel-tests.yml +++ b/.github/workflows/tunnel-tests.yml @@ -66,16 +66,16 @@ jobs: run: | go build -ldflags="-s -w" -o ../e2e/portr cmd/portr/*.go - - name: Start the tunnel + - name: Setup test data working-directory: ./e2e run: | - ./portr --config client.e2e.yaml http 9000 --subdomain test-tunnel-server & - sleep 3 + make load-pg-data - - name: Setup test data + - name: Start the tunnel working-directory: ./e2e run: | - make load-pg-data + ./portr --config client.e2e.yaml http 9000 --subdomain test-tunnel-server & + sleep 3 - name: Add hosts to /etc/hosts run: |