Skip to content

Deploy GitHub Actions verso Railway

I repository deployable del workspace usano .github/workflows/railway-deploy.yml per pubblicare su Railway.

Il trigger e intenzionalmente ristretto a:

  • push verso main
  • push verso master
  • workflow_dispatch lanciato da main o master

Un merge su main o master genera un push sul branch target, quindi avvia il deploy.

Secret GitHub

Ogni repository deployable deve configurare:

  • RAILWAY_API_TOKEN: token Railway per la CLI in CI
  • RAILWAY_PROJECT_ID: ID del project Railway corretto
  • RAILWAY_ENVIRONMENT: opzionale, nome o ID environment Railway

I repository che importano package @platform/* via file:../platform-shared-packages/... devono configurare anche:

  • SHARED_PACKAGES_REPOSITORY_TOKEN: token GitHub con lettura su CodeStormLab/cs-products-shared-packages

Repository Coperti

RepositoryServizi Railway
platform-auth-serviceauth
platform-ai-serviceai
platform-connectors-serviceconnectors
platform-payments-servicepayments
platform-scraper-servicescraper
platform-agent-serviceagent
platform-mcp-servicemcp
platform-status-servicestatus-api, status-web
platform-wikiwiki
funnel-ia-enginefunnel-api, funnel-worker, funnel-web
sfdc-externalsfdc-api, sfdc-web
cs-portalcs-portal-web
cs-chatcs-products-chat-api, cs-products-chat-web

Procedura Step By Step

1. Recupera Gli ID Railway

Annota:

  • <CORE_PROJECT_ID> per i servizi Core
  • <FUNNEL_PROJECT_ID> per funnel-ia-engine
  • <SFDC_PROJECT_ID> per sfdc-external
  • <CS_PORTAL_PROJECT_ID> per cs-portal
  • <CS_CHAT_PROJECT_ID> per cs-chat

Se usi un environment Railway specifico, annota anche nome o ID, per esempio production.

2. Crea I Token

Crea:

  • un token Railway per GitHub Actions
  • un token GitHub con permesso di lettura su CodeStormLab/cs-products-shared-packages

Il token GitHub serve per i repository che hanno dipendenze file:../platform-shared-packages/....

3. Configura I Secret Nei Repository

Secret comuni:

  • RAILWAY_API_TOKEN
  • RAILWAY_PROJECT_ID
  • RAILWAY_ENVIRONMENT, opzionale

Secret extra per repository con package condivisi:

  • SHARED_PACKAGES_REPOSITORY_TOKEN

4. Associa Il Project Railway Corretto

Usa:

  • <CORE_PROJECT_ID> per tutti i repository Core e platform-wiki
  • <FUNNEL_PROJECT_ID> per funnel-ia-engine
  • <SFDC_PROJECT_ID> per sfdc-external
  • <CS_PORTAL_PROJECT_ID> per cs-portal
  • <CS_CHAT_PROJECT_ID> per cs-chat

5. Pubblica I Workflow

Per ogni repository:

bash
git add .github/workflows/railway-deploy.yml
git commit -m "ci: add railway deploy workflow"
git push origin main

Per funnel-ia-engine e sfdc-external usa master:

bash
git push origin master

6. Proteggi I Branch

In GitHub, abilita branch protection su main o master:

  • pull request obbligatoria prima del merge
  • status check obbligatori se configuri anche workflow CI separati
  • bypass admin disabilitato se serve una policy rigida

7. Verifica Il Primo Deploy

Apri Actions nel repository, entra nel workflow Deploy to Railway e verifica:

  • build completata
  • deploy Railway completato
  • nuova deployment visibile nel servizio Railway corretto
  • healthcheck del servizio in stato healthy

Comandi gh CLI

Imposta i valori:

bash
export RAILWAY_API_TOKEN="<railway-token>"
export CORE_PROJECT_ID="<core-project-id>"
export FUNNEL_PROJECT_ID="<funnel-project-id>"
export SFDC_PROJECT_ID="<sfdc-project-id>"
export CS_PORTAL_PROJECT_ID="<cs-portal-project-id>"
export CS_CHAT_PROJECT_ID="<cs-products-chat-project-id>"
export RAILWAY_ENVIRONMENT="production"
export SHARED_PACKAGES_REPOSITORY_TOKEN="<github-token-with-shared-packages-read>"

Core senza package condivisi:

bash
for repo in \
  CodeStormLab/cs-products-auth-service \
  CodeStormLab/cs-products-connectors-service \
  CodeStormLab/cs-products-wiki
do
  gh secret set RAILWAY_API_TOKEN --repo "$repo" --body "$RAILWAY_API_TOKEN"
  gh secret set RAILWAY_PROJECT_ID --repo "$repo" --body "$CORE_PROJECT_ID"
  gh secret set RAILWAY_ENVIRONMENT --repo "$repo" --body "$RAILWAY_ENVIRONMENT"
done

Core con package condivisi:

bash
for repo in \
  CodeStormLab/cs-products-ai-service \
  CodeStormLab/cs-products-payments-service \
  CodeStormLab/cs-products-scraper-service \
  CodeStormLab/cs-agent-service \
  CodeStormLab/cs-products-mcp-service \
  CodeStormLab/cs-products-status-service
do
  gh secret set RAILWAY_API_TOKEN --repo "$repo" --body "$RAILWAY_API_TOKEN"
  gh secret set RAILWAY_PROJECT_ID --repo "$repo" --body "$CORE_PROJECT_ID"
  gh secret set RAILWAY_ENVIRONMENT --repo "$repo" --body "$RAILWAY_ENVIRONMENT"
  gh secret set SHARED_PACKAGES_REPOSITORY_TOKEN --repo "$repo" --body "$SHARED_PACKAGES_REPOSITORY_TOKEN"
done

Experience:

bash
gh secret set RAILWAY_API_TOKEN --repo jsanchezcodestorm/funnel-ia-engine --body "$RAILWAY_API_TOKEN"
gh secret set RAILWAY_PROJECT_ID --repo jsanchezcodestorm/funnel-ia-engine --body "$FUNNEL_PROJECT_ID"
gh secret set RAILWAY_ENVIRONMENT --repo jsanchezcodestorm/funnel-ia-engine --body "$RAILWAY_ENVIRONMENT"
gh secret set SHARED_PACKAGES_REPOSITORY_TOKEN --repo jsanchezcodestorm/funnel-ia-engine --body "$SHARED_PACKAGES_REPOSITORY_TOKEN"

gh secret set RAILWAY_API_TOKEN --repo jsanchezcodestorm/sfdc-external --body "$RAILWAY_API_TOKEN"
gh secret set RAILWAY_PROJECT_ID --repo jsanchezcodestorm/sfdc-external --body "$SFDC_PROJECT_ID"
gh secret set RAILWAY_ENVIRONMENT --repo jsanchezcodestorm/sfdc-external --body "$RAILWAY_ENVIRONMENT"
gh secret set SHARED_PACKAGES_REPOSITORY_TOKEN --repo jsanchezcodestorm/sfdc-external --body "$SHARED_PACKAGES_REPOSITORY_TOKEN"

cs-portal:

bash
gh secret set RAILWAY_API_TOKEN --repo CodeStormLab/cs-backoffice --body "$RAILWAY_API_TOKEN"
gh secret set RAILWAY_PROJECT_ID --repo CodeStormLab/cs-backoffice --body "$CS_PORTAL_PROJECT_ID"
gh secret set RAILWAY_ENVIRONMENT --repo CodeStormLab/cs-backoffice --body "$RAILWAY_ENVIRONMENT"

cs-chat:

bash
gh secret set RAILWAY_API_TOKEN --repo CodeStormLab/cs-products-chat --body "$RAILWAY_API_TOKEN"
gh secret set RAILWAY_PROJECT_ID --repo CodeStormLab/cs-products-chat --body "$CS_CHAT_PROJECT_ID"
gh secret set RAILWAY_ENVIRONMENT --repo CodeStormLab/cs-products-chat --body "$RAILWAY_ENVIRONMENT"
gh secret set SHARED_PACKAGES_REPOSITORY_TOKEN --repo CodeStormLab/cs-products-chat --body "$SHARED_PACKAGES_REPOSITORY_TOKEN"

Workspace reference: /Users/jeanpaul/projects/cs-repository