{"id":29452520,"url":"https://github.com/lmcrean/odyssey","last_synced_at":"2026-04-13T17:31:46.799Z","repository":{"id":250704149,"uuid":"835155737","full_name":"lmcrean/odyssey","owner":"lmcrean","description":"Odyssey is a B2B competitor analysis dashboard","archived":false,"fork":false,"pushed_at":"2025-07-23T16:15:23.000Z","size":180343,"stargazers_count":1,"open_issues_count":12,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-16T15:28:52.127Z","etag":null,"topics":["b2b","csharp"],"latest_commit_sha":null,"homepage":"http://odyssey.lauriecrean.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lmcrean.png","metadata":{"files":{"readme":".github/README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-07-29T09:17:48.000Z","updated_at":"2025-07-28T14:30:54.000Z","dependencies_parsed_at":"2024-09-13T02:32:01.724Z","dependency_job_id":"3cd3da61-db77-4aec-8493-dfa606e65b79","html_url":"https://github.com/lmcrean/odyssey","commit_stats":null,"previous_names":["lmcrean/moments-drf-api-clone-3","lmcrean/odyssey-api","lmcrean/odyssey"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lmcrean/odyssey","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmcrean%2Fodyssey","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmcrean%2Fodyssey/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmcrean%2Fodyssey/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmcrean%2Fodyssey/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lmcrean","download_url":"https://codeload.github.com/lmcrean/odyssey/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmcrean%2Fodyssey/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31762483,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T15:25:13.801Z","status":"ssl_error","status_checked_at":"2026-04-13T15:25:09.162Z","response_time":93,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["b2b","csharp"],"created_at":"2025-07-13T22:07:20.830Z","updated_at":"2026-04-13T17:31:46.794Z","avatar_url":"https://github.com/lmcrean.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitHub Actions Configuration System\n\nThis directory contains a reusable configuration system for GitHub Actions workflows that makes it easy to duplicate deployment setups across multiple projects.\n\n## 📁 File Structure\n\n```\n.github/\n├── project-config.yml          # Project-specific configuration\n├── project-config.template.yml # Template for new projects\n├── actions/\n│   └── load-config/\n│       └── action.yml          # Reusable action to load config\n├── workflows/                  # Your workflow files\n└── README.md                   # This file\n```\n\n## 🚀 Quick Start for New Projects\n\n### 1. Copy Configuration Files\n```bash\n# Copy the entire .github/actions directory\ncp -r .github/actions /path/to/new-project/.github/\n\n# Copy and rename the template\ncp .github/project-config.template.yml /path/to/new-project/.github/project-config.yml\n```\n\n### 2. Update Configuration\nEdit `.github/project-config.yml` in your new project:\n\n```yaml\nproject:\n  gcp:\n    project_id: \"your-new-project-id\"\n    service_account: \"github-actions@your-new-project.iam.gserviceaccount.com\"\n  firebase:\n    project_id: \"your-new-project-id\"\n    hosting:\n      main_url: \"https://your-new-project-id.web.app\"\n  app:\n    name: \"your-app-name\"\n    # ... update other values as needed\n```\n\n### 3. Copy Workflow Files\nCopy any workflow files you need - they will automatically use your new configuration.\n\n### 4. Set GitHub Secrets\nAdd these secrets to your GitHub repository:\n- `GCP_SA_KEY` - Your Google Cloud service account JSON\n- `GCP_PROJECT_ID` - Your Google Cloud project ID\n- `FIREBASE_SERVICE_ACCOUNT_KEY` - Your Firebase service account JSON\n\n## 🔧 How It Works\n\n### Configuration Loading\nEach workflow loads configuration using the shared action:\n\n```yaml\n- name: 📋 Load Project Configuration\n  id: config\n  uses: ./.github/actions/load-config\n```\n\n### Using Configuration Values\nReference configuration values in subsequent steps:\n\n```yaml\n- name: 🏗️ Build Application\n  run: |\n    cd ${{ steps.config.outputs.web-entry-point }}\n    ${{ steps.config.outputs.web-build-command }}\n```\n\n### Available Configuration Outputs\n\n| Output | Description | Example |\n|--------|-------------|---------|\n| `gcp-project-id` | Google Cloud project ID | `my-project-123456` |\n| `firebase-project-id` | Firebase project ID | `my-project-123456` |\n| `web-entry-point` | Web app directory | `apps/web` |\n| `web-build-command` | Build command | `npm run build` |\n| `api-service-name-pattern` | Service naming | `api-{branch}` |\n| And many more... | See `action.yml` for full list | |\n\n## 🔄 Benefits\n\n1. **Single Source of Truth** - All project configuration in one file\n2. **Easy Duplication** - Copy config + workflows to new projects\n3. **Consistent Deployments** - Same deployment logic across projects\n4. **Environment Flexibility** - Easy to switch between staging/production\n5. **Maintainable** - Update deployment logic in one place\n\n## 📝 Example: Creating a New Project\n\n```bash\n# 1. Create new project structure\nmkdir my-new-project\ncd my-new-project\ngit init\n\n# 2. Copy configuration system\ncp -r /path/to/odyssey/.github/actions .github/\ncp /path/to/odyssey/.github/project-config.template.yml .github/project-config.yml\n\n# 3. Copy needed workflows\ncp /path/to/odyssey/.github/workflows/deploy-web.production.* .github/workflows/\n\n# 4. Update configuration\nvim .github/project-config.yml  # Update all YOUR_* placeholders\n\n# 5. Add GitHub secrets via web interface or CLI\ngh secret set GCP_PROJECT_ID --body \"my-new-project-123456\"\n# ... add other secrets\n```\n\nThat's it! Your new project will have the same deployment capabilities.\n\n## 🛠️ Customization\n\n### Adding New Configuration Values\n1. Add to `project-config.yml`\n2. Add output to `actions/load-config/action.yml`\n3. Add parsing logic in the load-config action\n4. Use in workflows as `${{ steps.config.outputs.your-new-value }}`\n\n### Supporting Different Frameworks\nUpdate the `app.web` section in config for different frameworks:\n\n```yaml\n# For React/Next.js\napp:\n  web:\n    entry_point: \"frontend\"\n    build_command: \"npm run build\"\n    environment_file: \".env.production\"\n    config_file: \"public/config.js\"\n\n# For Vue/Nuxt\napp:\n  web:\n    entry_point: \"client\"\n    build_command: \"npm run generate\"\n    environment_file: \".env.production\"\n    config_file: \"static/config.js\"\n```\n\n## 🔍 Troubleshooting\n\n### Configuration Not Loading\n- Ensure `yq` is available (auto-installed by the action)\n- Check that `project-config.yml` exists and has valid YAML syntax\n- Verify the config file path in workflow\n\n### Workflow Failures\n- Check that all required secrets are set\n- Verify GCP/Firebase permissions\n- Ensure configuration values match your actual infrastructure\n\n### New Project Setup Issues\n- Make sure you copied the entire `.github/actions` directory\n- Update ALL placeholder values in the config file\n- Verify GitHub secrets are set correctly\n\n## 📚 Further Reading\n\n- [GitHub Actions Documentation](https://docs.github.com/en/actions)\n- [Google Cloud Run Documentation](https://cloud.google.com/run/docs)\n- [Firebase Hosting Documentation](https://firebase.google.com/docs/hosting)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flmcrean%2Fodyssey","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flmcrean%2Fodyssey","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flmcrean%2Fodyssey/lists"}