diff --git a/.github/workflows/deploy.test.yml b/.github/workflows/deploy.test.yml new file mode 100644 index 00000000..4c54cab0 --- /dev/null +++ b/.github/workflows/deploy.test.yml @@ -0,0 +1,34 @@ +name: Deployment for Test Environment +on: + push: + branches: main + +jobs: + deploy: + runs-on: self-hosted + steps: + - uses: actions/checkout@v3 + + - name: Set up env vars + run: | + cp dev.env .env + + # jwt secret + sed -i 's|GOTRUE_JWT_SECRET=.*|GOTRUE_JWT_SECRET=${{ secrets.GOTRUE_JWT_SECRET_TEST }}|' .env + # smtp settings + sed -i 's|GOTRUE_SMTP_HOST=.*|GOTRUE_SMTP_HOST=smtp.gmail.com|' .env + sed -i 's|GOTRUE_SMTP_PORT=.*|GOTRUE_SMTP_PORT=465|' .env + sed -i 's|GOTRUE_SMTP_USER=.*|GOTRUE_SMTP_USER=${{ secrets.GOTRUE_SMTP_USER_TEST }}|' .env + sed -i 's|GOTRUE_SMTP_PASS=.*|GOTRUE_SMTP_PASS=${{ secrets.GOTRUE_SMTP_PASS_TEST }}|' .env + sed -i 's|GOTRUE_SMTP_ADMIN_EMAIL=.*|GOTRUE_SMTP_ADMIN_EMAIL=${{ secrets.GOTRUE_SMTP_ADMIN_EMAIL_TEST }}|' .env + sed -i 's|GOTRUE_MAILER_AUTOCONFIRM=.*|GOTRUE_MAILER_AUTOCONFIRM=false|' .env + # Google OAuth + sed -i 's|GOTRUE_EXTERNAL_GOOGLE_ENABLED=.*|GOTRUE_EXTERNAL_GOOGLE_ENABLED=true|' .env + sed -i 's|GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID=.*|GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID=${{ secrets.GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID_TEST }}|' .env + sed -i 's|GOTRUE_EXTERNAL_GOOGLE_SECRET=.*|GOTRUE_EXTERNAL_GOOGLE_SECRET=${{ secrets.GOTRUE_EXTERNAL_GOOGLE_SECRET_TEST }}|' .env + sed -i 's|GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI=.*|GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI=${{ secrets.GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI_TEST }}|' .env + # Server Host + sed -i 's|API_EXTERNAL_URL=.*|API_EXTERNAL_URL=${{ secrets.API_EXTERNAL_URL_TEST }}|' .env + + - name: Deploy docker-compose + run: sudo docker-compose up -d --build diff --git a/dev.env b/dev.env index 77aa9c23..956b5830 100644 --- a/dev.env +++ b/dev.env @@ -16,6 +16,7 @@ GOTRUE_SMTP_PASS=email_sender_password GOTRUE_SMTP_ADMIN_EMAIL=comp_admin@@some_company.com # clicking on email verification link will redirect to this host +# change this to your own domain where you host the docker-compose or gotrue API_EXTERNAL_URL=http://localhost:9998 # the account that the test will pick up as a registered user diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 91085e9c..6b54ae68 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -30,7 +30,7 @@ services: - GOTRUE_SITE_URL=appflowy-flutter:// # redirected to AppFlowy application - GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET} # authentication secret - GOTRUE_DB_DRIVER=postgres - - API_EXTERNAL_URL=${API_EXTERNAL_URL:-http://localhost:9998} # change 'localhost' to the public host of machine that is running on + - API_EXTERNAL_URL=${API_EXTERNAL_URL} - DATABASE_URL=postgres://supabase_auth_admin:root@postgres:5432/postgres - PORT=9999 - GOTRUE_SMTP_HOST=${GOTRUE_SMTP_HOST} # e.g. smtp.gmail.com @@ -44,6 +44,6 @@ services: - GOTRUE_EXTERNAL_GOOGLE_ENABLED=${GOTRUE_EXTERNAL_GOOGLE_ENABLED} - GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID=${GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID} - GOTRUE_EXTERNAL_GOOGLE_SECRET=${GOTRUE_EXTERNAL_GOOGLE_SECRET} - - GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI=http://localhost:9998/callback + - GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI=${GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI} ports: - 9998:9999 diff --git a/docker-compose.yml b/docker-compose.yml index b3ee1c6a..b1b384e7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -30,7 +30,7 @@ services: - GOTRUE_SITE_URL=appflowy-flutter:// # redirected to AppFlowy application - GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET} # authentication secret - GOTRUE_DB_DRIVER=postgres - - API_EXTERNAL_URL=${API_EXTERNAL_URL:-http://localhost:9998} # change 'localhost' to the public host of machine that is running on + - API_EXTERNAL_URL=${API_EXTERNAL_URL} - DATABASE_URL=postgres://supabase_auth_admin:root@postgres:5432/postgres - PORT=9999 - GOTRUE_SMTP_HOST=${GOTRUE_SMTP_HOST} # e.g. smtp.gmail.com @@ -53,6 +53,7 @@ services: environment: - APP_ENVIRONMENT=production - APP__GOTRUE__JWT_SECRET=${GOTRUE_JWT_SECRET} + - APP__GOTRUE__EXT_URL=${API_EXTERNAL_URL} build: context: . dockerfile: Dockerfile diff --git a/libs/gotrue/src/api.rs b/libs/gotrue/src/api.rs index 6b261201..219bd23a 100644 --- a/libs/gotrue/src/api.rs +++ b/libs/gotrue/src/api.rs @@ -8,14 +8,16 @@ use infra::reqwest::{check_response, from_body, from_response}; #[derive(Clone)] pub struct Client { client: reqwest::Client, - pub base_url: String, + base_url: String, + pub ext_url: String, } impl Client { - pub fn new(client: reqwest::Client, url: &str) -> Self { + pub fn new(client: reqwest::Client, base_url: &str, ext_url: &str) -> Self { Self { client, - base_url: url.to_string(), + base_url: base_url.to_owned(), + ext_url: ext_url.to_owned(), } } diff --git a/src/application.rs b/src/application.rs index d230b80c..38d90015 100644 --- a/src/application.rs +++ b/src/application.rs @@ -154,7 +154,8 @@ async fn migrate(pool: &PgPool) { } async fn get_gotrue_client(setting: &GoTrueSetting) -> gotrue::api::Client { - let gotrue_client = gotrue::api::Client::new(reqwest::Client::new(), &setting.base_url); + let gotrue_client = + gotrue::api::Client::new(reqwest::Client::new(), &setting.base_url, &setting.ext_url); gotrue_client .health() .await diff --git a/src/biz/user.rs b/src/biz/user.rs index 41b43474..a3387bcb 100644 --- a/src/biz/user.rs +++ b/src/biz/user.rs @@ -53,7 +53,7 @@ pub async fn oauth(gotrue_client: &Client, provider: OAuthProvider) -> Result, } diff --git a/tests/gotrue/health.rs b/tests/gotrue/health.rs index 75a3002c..b083dc2d 100644 --- a/tests/gotrue/health.rs +++ b/tests/gotrue/health.rs @@ -3,6 +3,10 @@ use gotrue::api::Client; #[tokio::test] async fn gotrue_health() { let http_client = reqwest::Client::new(); - let gotrue_client = Client::new(http_client, "http://localhost:9998"); + let gotrue_client = Client::new( + http_client, + "http://localhost:9998", + "http://localhost:9998", + ); gotrue_client.health().await.unwrap(); } diff --git a/tests/gotrue/settings.rs b/tests/gotrue/settings.rs index b0c810cb..6daaf940 100644 --- a/tests/gotrue/settings.rs +++ b/tests/gotrue/settings.rs @@ -3,6 +3,10 @@ use gotrue::api::Client; #[tokio::test] async fn gotrue_settings() { let http_client = reqwest::Client::new(); - let gotrue_client = Client::new(http_client, "http://localhost:9998"); + let gotrue_client = Client::new( + http_client, + "http://localhost:9998", + "http://localhost:9998", + ); gotrue_client.settings().await.unwrap(); }