{"id":37425268,"url":"https://github.com/aistomin/andy.grails","last_synced_at":"2026-01-16T06:12:43.162Z","repository":{"id":279018178,"uuid":"937491670","full_name":"aistomin/andy.grails","owner":"aistomin","description":"Andy Grails' Website","archived":false,"fork":false,"pushed_at":"2026-01-07T18:42:42.000Z","size":125,"stargazers_count":1,"open_issues_count":8,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-08T06:19:15.524Z","etag":null,"topics":["angular","blues","homepage","java","music"],"latest_commit_sha":null,"homepage":"https://andy-grails.de","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aistomin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-23T07:18:50.000Z","updated_at":"2026-01-07T18:42:45.000Z","dependencies_parsed_at":"2025-11-30T05:02:13.611Z","dependency_job_id":null,"html_url":"https://github.com/aistomin/andy.grails","commit_stats":null,"previous_names":["aistomin/andy.grails"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aistomin/andy.grails","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aistomin%2Fandy.grails","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aistomin%2Fandy.grails/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aistomin%2Fandy.grails/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aistomin%2Fandy.grails/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aistomin","download_url":"https://codeload.github.com/aistomin/andy.grails/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aistomin%2Fandy.grails/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28477633,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T03:13:13.607Z","status":"ssl_error","status_checked_at":"2026-01-16T03:11:47.863Z","response_time":107,"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":["angular","blues","homepage","java","music"],"created_at":"2026-01-16T06:12:42.605Z","updated_at":"2026-01-16T06:12:43.155Z","avatar_url":"https://github.com/aistomin.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Andy Grails' Website\n\nThis is the main repository for the [Andy Grails' website](https://andy-grails.de/)\n— a personal project to showcase and stream music under the nickname _Andy Grails_.\nThe site is powered by a **Java backend** and an **Angular frontend**, structured\nas Git submodules.\n\n## Repository Structure\n\nThis repository acts as a wrapper for the two core components:\n\nandy.grails/\n\n- andy.grails.backend/ (Java Spring Boot backend: API, data services)\n- andy.grails.frontend/ (Angular frontend: UI and client logic)\n\n### Submodules\n\n- [**backend**](https://github.com/aistomin/andy.grails.backend):  \n  A Java Spring Boot application providing RESTful APIs to serve music data,\n  media, and metadata.\n\n- [**frontend**](https://github.com/aistomin/andy.grails.frontend):  \n  An Angular-based web application that presents the user interface, consumes\n  the backend API, and delivers the overall user experience.\n\n## Getting Started\n\nTo clone this repository:\n\n```bash\ngit clone git@github.com:aistomin/andy.grails.git\n```\n\n**Note:** Submodules are not required to be initialized for running the application with Docker. The scripts pull Docker images directly from Docker Hub based on Git revisions.\n\nEach submodule has its own `README.md` with specific instructions for building\nand running the backend and frontend.\n\n## Quick Start with Docker\n\nThis repository includes convenient scripts to run the entire application stack using Docker:\n\n### Prerequisites\n\n- Docker and Docker Compose installed\n- Git repository cloned (submodules are **not** required to be initialized)\n\n### Available Scripts\n\n#### 🚀 `start.sh` - Start the Application\n\nStarts the complete application stack (frontend + backend + database) using Docker Compose.\n\n```bash\n./start.sh\n```\n\n**What it does:**\n\n- Gets the current Git revision from the main repository\n- Pulls Docker images from Docker Hub using revision-based tags\n- Starts PostgreSQL database, backend API, and frontend\n- Provides access URLs for all services\n\n**Access URLs:**\n\n- Frontend: http://localhost:4200\n- Backend API: http://localhost:8080\n- Database: localhost:55432\n\n#### 🛑 `stop.sh` - Stop the Application\n\nStops all running containers and cleans up the application stack.\n\n```bash\n./stop.sh\n```\n\n#### 🚀 `deploy.sh` - Deploy to Specific Revision\n\nDeploys the application to a specific Git revision, allowing easy rollbacks and deployments.\n\n```bash\n./deploy.sh \u003cgit-revision\u003e\n```\n\n**Examples:**\n\n```bash\n# Deploy to a specific commit\n./deploy.sh abc1234\n\n# Deploy to a branch\n./deploy.sh main\n\n# Deploy to a tag\n./deploy.sh v1.0.0\n```\n\n**What it does:**\n\n1. Checks for local changes (fails if any uncommitted changes exist)\n2. Validates the specified Git revision exists\n3. Checks out the revision and updates submodules\n4. Stops the current application\n5. Starts the application with the new revision\n\n**Safety Features:**\n\n- Prevents deployment with uncommitted changes\n- Validates revision existence before checkout\n- Provides helpful error messages and suggestions\n\n### Docker Images\n\nThe application uses Docker Hub images with revision-based tagging:\n\n- **Backend**: `andygrails/andy-grails-backend:\u003crevision\u003e`\n- **Frontend**: `andygrails/andy-grails-frontend:\u003crevision\u003e`\n\n### Environment Variables\n\nYou can customize the database configuration using environment variables:\n\n- `DB_NAME` (default: andy_grails)\n- `DB_USER` (default: andy)\n- `DB_PASSWORD` (default: andy)\n\n### Useful Commands\n\n```bash\n# View application logs\ndocker compose logs -f\n\n# View logs for specific service\ndocker compose logs -f backend\ndocker compose logs -f frontend\ndocker compose logs -f db\n\n# Remove all containers and volumes\ndocker compose down -v\n\n# Rebuild and start (if you need to rebuild images)\ndocker compose up --build -d\n```\n\n## Playwright End-to-End Tests\n\nE2E tests live in this repository (outside the submodules) under `playwright/` and assume the application is already running in Docker.\n\n### Prerequisites\n\n- Run the application stack and ensure the frontend is reachable at `http://localhost:4200`:\n\n  ```bash\n  ./start.sh\n  ```\n\n### Running the Tests\n\n```bash\n./run-e2e-tests.sh\n```\n\nTo target a different URL, override the `PLAYWRIGHT_BASE_URL` environment variable:\n\n```bash\nPLAYWRIGHT_BASE_URL=http://localhost:4300 npm test\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faistomin%2Fandy.grails","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faistomin%2Fandy.grails","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faistomin%2Fandy.grails/lists"}