الملفات
GHyamah-Test/README.md

120 أسطر
5.4 KiB
Markdown

# Ghaymah Cloud Technical Assessment
Complete implementation of the five Ghaymah cloud assessment tasks: deployment,
monitoring, incident analysis, CI/CD, scalability, and the `mithal.space`
monitoring dashboard.
## Deliverables
| Question | Deliverable | Status |
|---|---|---|
| Q1 — Deploy and monitor an API | [Application, monitor, dashboard, and deployment guide](q1-deploy-monitor/README.md) | HTTP 200 verified 2026-07-26 20:46:07 UTC |
| Q2 — OOMKilled postmortem | [Professional blameless postmortem](q2-postmortem/POSTMORTEM.md) | Complete |
| Q3 — CI/CD pipeline | [Workflow](.github/workflows/deploy.yml) and [documentation](q3-cicd/CICD.md) | Complete |
| Q4 — Scalability | [Architecture, capacity calculation, cold starts, and storage](q4-scalability/SCALABILITY.md) | Complete |
| Q5 — `mithal.space` monitoring | [Collector and dashboard](q5-mithal-dashboard/) | HTTP 200 verified 2026-07-26 20:46:07 UTC |
## Service endpoints
Both application endpoints returned HTTP 200 in a fresh check at
**2026-07-26 20:46:07 UTC**:
- Q1 API: <https://ghaymah-api-615e99f13665.hosted.ghaymah.systems>
- Q1 health: <https://ghaymah-api-615e99f13665.hosted.ghaymah.systems/health>
- Q1 OpenAPI: <https://ghaymah-api-615e99f13665.hosted.ghaymah.systems/docs>
- Q5 dashboard: <https://mithal-monitor-292f00f076b1.hosted.ghaymah.systems>
- Docker Hub API image: `docker.io/agamy74/ghaymah-api`
- Docker Hub dashboard image: `docker.io/agamy74/mithal-monitor`
- Public repository: <https://github.com/yassinelagamy/GHyamah-Test>
- Successful protected deployment run:
<https://github.com/yassinelagamy/GHyamah-Test/actions/runs/30215537509>
## Deployment evidence
The curated evidence set is documented in
[docs/evidence/README.md](docs/evidence/README.md).
| Evidence | Screenshot |
|---|---|
| Ghaymah project and applications | [Project](docs/evidence/screenshots/01-ghaymah-project.png) |
| Q1 API service | [Q1 service](docs/evidence/screenshots/02-q1-service.png) |
| Q1 health response recorded 2026-07-26 18:48:19 UTC | [Q1 health](docs/evidence/screenshots/03-q1-health.png) |
| Q1 monitoring dashboard | [Q1 dashboard](docs/evidence/screenshots/04-q1-dashboard.png) |
| Q5 Ghaymah service | [Q5 service](docs/evidence/screenshots/05-q5-service.png) |
| Q5 monitoring dashboard | [Q5 dashboard](docs/evidence/screenshots/06-q5-dashboard.png) |
| GitHub production protection | [Approval protection](docs/evidence/screenshots/07-production-approval.png) |
| Successful CI/CD run | [Pipeline](docs/evidence/screenshots/08-pipeline-success.png) |
## CI/CD behavior
The workflow:
1. Builds `q1-deploy-monitor/app`.
2. Embeds the Git commit as `RELEASE_SHA`.
3. Pushes immutable SHA and `latest` tags to Docker Hub.
4. Starts the immutable image in an ephemeral staging container.
5. Requires `status=ok` and the expected SHA from `/health`.
6. Pauses for the required reviewer on the GitHub `production` Environment.
7. Verifies that the deployed Ghaymah application serves the approved SHA.
Ghaymah CLI `0.0.24` documents interactive email/password login but does not
publish API-token authentication or the external-image field for
`gy resource app update`. Production image promotion therefore uses the
authenticated dashboard and is followed by automated release verification. The
workflow does not report a stale or unverified deployment as successful.
The account's five-resource free-plan limit prevents a third persistent Ghaymah
application, so staging runs as an isolated ephemeral container on the Actions
runner. Production and the Q5 dashboard both returned HTTP 200 at
2026-07-26 20:46:07 UTC.
## Free-tier hibernation policy
Both applications run on the Ghaymah free tier. They may be put into
**Hibernate** in the Ghaymah dashboard when the assessment is not being reviewed
to conserve container credits; hibernated public URLs return HTTP 503. Before
submission or review, open each application and select **Wake Up**, then verify
both public endpoints and record the UTC check time. Hibernation preserves the
deployment configuration but stops the Q5 in-container collector.
## Verified platform information
- The authenticated deployment form accepts a Git repository or container image,
registry pull secret, instance size, application name, port, public access,
custom domain, environment variables, and storage volumes.
- Docker Hub is available through External Integrations.
- The authenticated volume form displays a range from 50 MiB to 10 GiB.
- The official CLI installs with
`curl -sSL https://cli.ghaymah.systems/install.sh | bash`.
- CLI `0.0.24` exposes `gy version`, `gy auth login`,
`gy resource app init`, `gy resource app launch`, logs, and a generic
`gy resource app update`.
Official references:
- [Ghaymah CLI documentation](https://ghaymah.systems/docs)
- [Ghaymah CLI overview](https://ghaymah.systems/cli)
- [Ghaymah products](https://ghaymah.systems/products)
## Local checks
```bash
docker build --build-arg RELEASE_SHA=local \
-t ghaymah-api:local q1-deploy-monitor/app
docker run --rm -p 8080:8080 ghaymah-api:local
curl -f http://localhost:8080/health
```
```bash
APP_URL=https://ghaymah-api-615e99f13665.hosted.ghaymah.systems \
python q1-deploy-monitor/monitor/monitor.py --once
```
```bash
python q5-mithal-dashboard/collector/collect.py --once
```
No credentials are stored in the repository. Docker Hub credentials remain in
GitHub Secrets and Ghaymah registry authentication remains in the platform
integration.