{"id":41821007,"url":"https://github.com/bigbag/actix","last_synced_at":"2026-02-15T09:17:26.279Z","repository":{"id":332925464,"uuid":"1135429242","full_name":"bigbag/actix","owner":"bigbag","description":"TUI application for monitoring and triggering GitHub Actions workflows. View runs, logs, and trigger workflow_dispatch — all from your terminal.","archived":false,"fork":false,"pushed_at":"2026-01-19T05:40:30.000Z","size":602,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-25T20:41:47.879Z","etag":null,"topics":["bubbletea","cli","devops","github-actions","github-api","golang","tui","workflow"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bigbag.png","metadata":{"files":{"readme":"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-16T04:47:44.000Z","updated_at":"2026-01-19T05:40:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bigbag/actix","commit_stats":null,"previous_names":["bigbag/actix"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/bigbag/actix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigbag%2Factix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigbag%2Factix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigbag%2Factix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigbag%2Factix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bigbag","download_url":"https://codeload.github.com/bigbag/actix/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigbag%2Factix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29227378,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T09:43:19.170Z","status":"ssl_error","status_checked_at":"2026-02-08T09:42:55.556Z","response_time":57,"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":["bubbletea","cli","devops","github-actions","github-api","golang","tui","workflow"],"created_at":"2026-01-25T07:44:27.185Z","updated_at":"2026-02-08T10:01:10.321Z","avatar_url":"https://github.com/bigbag.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# actix\n\n[![Go Version](https://img.shields.io/github/go-mod/go-version/bigbag/actix)](https://github.com/bigbag/actix)\n[![Build](https://img.shields.io/github/actions/workflow/status/bigbag/actix/build.yaml?branch=master)](https://github.com/bigbag/actix/actions/workflows/build.yaml)\n[![Release](https://img.shields.io/github/v/release/bigbag/actix)](https://github.com/bigbag/actix/releases/latest)\n[![license](https://img.shields.io/github/license/bigbag/actix.svg)](https://github.com/bigbag/actix/blob/master/LICENSE)\n\nA lightweight, self-hosted web UI for GitHub Actions — inspired by Jenkins. Monitor workflow runs, view stage pipelines, trigger builds, and browse logs, all from a dark-themed dashboard with sidebar navigation and breadcrumbs.\n\n## Screenshots\n\n### Dashboard\n\nProject table grouped by repository with status circles, last success/failure times, and one-click build triggers.\n\n![Dashboard](docs/images/dashboard.png)\n\n### Workflow Runs\n\nBuild history sidebar with status indicators, full runs table with branch, commit, duration, and actor details.\n\n![Runs](docs/images/runs.png)\n\n### Stage View\n\nJenkins-style stage grid showing job status with colored cells. Run metadata (branch, commit, actor, duration) displayed above.\n\n![Pipeline](docs/images/pipeline.png)\n\n### Logs\n\nInline log viewer below the stage grid — click any stage cell to load job logs.\n\n![Logs](docs/images/logs.png)\n\n### Build with Parameters\n\nTrigger workflow dispatches with dynamic input forms, branch/tag selection, and sidebar navigation.\n\n![Build](docs/images/build.png)\n\n## Features\n\n- **Jenkins-style layout** — Sidebar navigation, breadcrumb bar, stage view grid\n- **Repository groups** — Organize workflows by project groups in the sidebar\n- **Dashboard** — Status circles, last success/failure, duration, play button per workflow\n- **Stage View** — Visual job grid with colored status cells (click to view logs)\n- **Build with Parameters** — Trigger workflow_dispatch with dynamic input forms and branch/tag selection\n- **Build history** — Sidebar list with status indicators and run numbers\n- **Auto-refresh** — Configurable HTMX-powered polling with loading indicator\n- **Cancel / Rerun** — Cancel running workflows or rerun completed ones\n- **Open in GitHub** — Quick links to GitHub Actions UI\n- **Dark theme** — Full dark color scheme\n\n## Quick Start\n\n1. Get a GitHub token (see [GitHub Token Setup](#github-token-setup))\n\n2. Create config file at `~/.config/actix/config.json`:\n\n```json\n{\n  \"github_token\": \"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n  \"refresh_interval\": 30,\n  \"auto_refresh\": true,\n  \"port\": 9808,\n  \"groups\": [\n    {\n      \"name\": \"Work Projects\",\n      \"repositories\": [\"org/repo-one\", \"org/repo-two\"]\n    }\n  ]\n}\n```\n\n3. Build and run:\n\n```bash\nmake build\n./bin/actix\n```\n\n4. Open http://localhost:9808 in your browser.\n\nOr use a custom config file or override the port:\n\n```bash\n./bin/actix --config /path/to/config.json\n./bin/actix -c /path/to/config.json  # shorthand\n./bin/actix --port 3000              # override port\n./bin/actix -p 3000                  # shorthand\n```\n\nOr set `GITHUB_TOKEN` environment variable (takes priority over config file):\n\n```bash\nexport GITHUB_TOKEN=\"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n./bin/actix\n```\n\n## Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/bigbag/actix.git\ncd actix\n\n# Build (requires templ CLI: go install github.com/a-h/templ/cmd/templ@latest)\nmake build\n\n# Or install to GOPATH/bin\nmake install\n```\n\n## GitHub Token Setup\n\nactix requires a GitHub Personal Access Token to access the GitHub API.\n\n### Creating a Fine-grained Token (Recommended)\n\n1. Go to [GitHub Settings \u003e Developer settings \u003e Personal access tokens \u003e Fine-grained tokens](https://github.com/settings/tokens?type=beta)\n2. Click **Generate new token**\n3. Set a descriptive name (e.g., \"actix\")\n4. Set expiration as needed\n5. Under **Repository access**, select the repositories you want to monitor\n6. Under **Permissions \u003e Repository permissions**, grant:\n   - **Actions**: Read and write (to view runs and trigger workflows)\n   - **Contents**: Read-only (to read workflow files for inputs)\n   - **Metadata**: Read-only (required)\n7. Click **Generate token**\n8. Copy the token (starts with `github_pat_`)\n\n### Creating a Classic Token\n\n1. Go to [GitHub Settings \u003e Developer settings \u003e Personal access tokens \u003e Tokens (classic)](https://github.com/settings/tokens)\n2. Click **Generate new token (classic)**\n3. Set a descriptive name\n4. Select scopes:\n   - `repo` - Full control of private repositories (or `public_repo` for public only)\n   - `workflow` - Update GitHub Action workflows\n5. Click **Generate token**\n6. Copy the token (starts with `ghp_`)\n\n### Token Storage\n\nYou can provide the token in two ways:\n\n1. **Environment variable** (recommended for security):\n   ```bash\n   export GITHUB_TOKEN=\"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n   ```\n\n2. **Config file** at `~/.config/actix/config.json`:\n   ```json\n   {\n     \"github_token\": \"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n   }\n   ```\n\nThe environment variable takes priority if both are set.\n\n## Configuration\n\n### CLI Flags\n\n- `--config`, `-c` - Path to config file (default: `~/.config/actix/config.json`)\n- `--port`, `-p` - Web server port (overrides config file value)\n\n### Config File\n\nDefault location: `~/.config/actix/config.json`\n\n```json\n{\n  \"github_token\": \"ghp_xxx...\",\n  \"refresh_interval\": 30,\n  \"auto_refresh\": true,\n  \"port\": 9808,\n  \"groups\": [\n    {\n      \"name\": \"Work Projects\",\n      \"repositories\": [\"org/repo-one\", \"org/repo-two\"]\n    },\n    {\n      \"name\": \"Personal\",\n      \"repositories\": [\"username/my-project\"]\n    }\n  ]\n}\n```\n\n- `github_token` (string, required) - GitHub Personal Access Token\n- `refresh_interval` (int, default: 30) - Auto-refresh interval in seconds\n- `auto_refresh` (bool, default: true) - Enable auto-refresh\n- `port` (int, default: 9808) - HTTP server port\n- `groups` (array, required) - Repository groups\n  - `name` (string, required) - Group name (shown in sidebar)\n  - `repositories` (array, required) - List of `owner/repo` strings\n\n## Make Commands\n\n```bash\nmake build       # Build binary to bin/actix (generates templ + compiles)\nmake run         # Build and run\nmake run/quick   # Run without rebuild\nmake test        # Run tests\nmake vet         # Run go vet\nmake tidy        # Tidy Go modules\nmake templ       # Generate templ templates\nmake clean       # Remove build artifacts\nmake install     # Install to GOPATH/bin\nmake build-all   # Build for linux/darwin amd64/arm64\n```\n\n## Testing\n\nThe project includes unit tests for major components.\n\n### Running Tests\n\n```bash\n# Run all tests\nmake test\n\n# Run tests with verbose output\ngo test -v ./...\n\n# Run tests with coverage\ngo test -cover ./...\n\n# Run specific package tests\ngo test -v ./internal/github/...\ngo test -v ./internal/config/...\n```\n\n### Test Coverage\n\nTests cover the following areas:\n\n- **internal/github** - Repository parsing, duration formatting, URL building, tag fetching\n- **internal/config** - Configuration loading, validation, environment variable overrides\n\nTests run automatically in CI before builds on pull requests and releases.\n\n## Troubleshooting\n\n### 404 Not Found errors\n\nIf you see `404 Not Found (check token permissions)`:\n\n1. **Fine-grained token**: You must explicitly grant access to each repository:\n   - Go to https://github.com/settings/tokens?type=beta\n   - Edit your token\n   - Under **Repository access**, select the specific repositories\n   - Under **Permissions \u003e Repository permissions**, ensure **Actions** has \"Read\" access\n\n2. **Classic token**: Ensure you have the `repo` scope selected\n\n3. **Private organization repos**: Your token must have access to the organization. Contact your org admin if needed.\n\n### 401 Unauthorized errors\n\nYour token is invalid or expired:\n- Generate a new token at https://github.com/settings/tokens\n- Update your config or environment variable\n\n### 403 Forbidden errors\n\nEither rate limited or access denied:\n- Wait a few minutes if rate limited\n- Check that your token has correct permissions\n- For organization repos, ensure SSO is authorized if required\n\n### Viewing logs\n\nactix writes detailed logs to `~/.config/actix/actix.log`:\n\n```bash\n# Follow logs in real-time\ntail -f ~/.config/actix/actix.log\n\n# View recent logs\ncat ~/.config/actix/actix.log\n```\n\n### Repository format\n\nRepositories in config can be specified as:\n- `owner/repo` (recommended)\n- `owner/repo/` (trailing slash OK)\n- `https://github.com/owner/repo` (full URL OK)\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbigbag%2Factix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbigbag%2Factix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbigbag%2Factix/lists"}