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:
pushversomainpushversomasterworkflow_dispatchlanciato damainomaster
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 CIRAILWAY_PROJECT_ID: ID del project Railway correttoRAILWAY_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 suCodeStormLab/cs-products-shared-packages
Repository Coperti
| Repository | Servizi Railway |
|---|---|
platform-auth-service | auth |
platform-ai-service | ai |
platform-connectors-service | connectors |
platform-payments-service | payments |
platform-scraper-service | scraper |
platform-agent-service | agent |
platform-mcp-service | mcp |
platform-status-service | status-api, status-web |
platform-wiki | wiki |
funnel-ia-engine | funnel-api, funnel-worker, funnel-web |
sfdc-external | sfdc-api, sfdc-web |
cs-portal | cs-portal-web |
cs-chat | cs-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>perfunnel-ia-engine<SFDC_PROJECT_ID>persfdc-external<CS_PORTAL_PROJECT_ID>percs-portal<CS_CHAT_PROJECT_ID>percs-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_TOKENRAILWAY_PROJECT_IDRAILWAY_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 eplatform-wiki<FUNNEL_PROJECT_ID>perfunnel-ia-engine<SFDC_PROJECT_ID>persfdc-external<CS_PORTAL_PROJECT_ID>percs-portal<CS_CHAT_PROJECT_ID>percs-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 mainPer funnel-ia-engine e sfdc-external usa master:
bash
git push origin master6. 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"
doneCore 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"
doneExperience:
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"