ci: test env docker-compose deployment (#48)

* ci: test env docker-compose deployment

* ci: test deployment

* fix: replace delimiter with pipe to avoid conflict

* fix: API_EXTERNAL_URL_TEST from secrets

* chore: remove unneeded deploy when pull request

* fix: cloud public host name/address

* chore: trigger: change to push

* chore: add ext_url for exposed gotrue auth server
This commit is contained in:
Zack 2023-09-15 21:13:43 +08:00 committed by GitHub
parent e9fc2af43c
commit 3c598f178e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 58 additions and 10 deletions

34
.github/workflows/deploy.test.yml vendored Normal file
View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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(),
}
}

View File

@ -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

View File

@ -53,7 +53,7 @@ pub async fn oauth(gotrue_client: &Client, provider: OAuthProvider) -> Result<OA
Ok(OAuthURL {
url: format!(
"{}/authorize?provider={}",
gotrue_client.base_url,
gotrue_client.ext_url,
provider.as_str(),
),
})

View File

@ -17,6 +17,7 @@ pub struct Config {
#[derive(serde::Deserialize, Clone, Debug)]
pub struct GoTrueSetting {
pub base_url: String,
pub ext_url: String, // public url
pub jwt_secret: Secret<String>,
}

View File

@ -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();
}

View File

@ -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();
}