{"id":21721374,"url":"https://github.com/informaticsmatters/squonk2-data-manager-ui","last_synced_at":"2026-05-19T14:01:25.625Z","repository":{"id":37022116,"uuid":"288203695","full_name":"InformaticsMatters/squonk2-data-manager-ui","owner":"InformaticsMatters","description":"Web UI for the Squonk Data Manager","archived":false,"fork":false,"pushed_at":"2026-05-19T13:31:00.000Z","size":14356,"stargazers_count":2,"open_issues_count":71,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-19T13:58:27.333Z","etag":null,"topics":["squonk2"],"latest_commit_sha":null,"homepage":"https://squonk.it/data-manager-ui","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/InformaticsMatters.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2020-08-17T14:34:44.000Z","updated_at":"2026-04-29T14:09:18.000Z","dependencies_parsed_at":"2025-12-03T05:03:12.577Z","dependency_job_id":null,"html_url":"https://github.com/InformaticsMatters/squonk2-data-manager-ui","commit_stats":null,"previous_names":[],"tags_count":228,"template":false,"template_full_name":null,"purl":"pkg:github/InformaticsMatters/squonk2-data-manager-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InformaticsMatters%2Fsquonk2-data-manager-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InformaticsMatters%2Fsquonk2-data-manager-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InformaticsMatters%2Fsquonk2-data-manager-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InformaticsMatters%2Fsquonk2-data-manager-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/InformaticsMatters","download_url":"https://codeload.github.com/InformaticsMatters/squonk2-data-manager-ui/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InformaticsMatters%2Fsquonk2-data-manager-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33219360,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-19T07:54:09.561Z","status":"ssl_error","status_checked_at":"2026-05-19T07:54:08.508Z","response_time":58,"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":["squonk2"],"created_at":"2024-11-26T02:16:10.950Z","updated_at":"2026-05-19T14:01:25.566Z","avatar_url":"https://github.com/InformaticsMatters.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Squonk 2 Data Manager UI\n\n![build](https://github.com/InformaticsMatters/squonk2-data-manager-ui/workflows/build/badge.svg)\n![release](https://github.com/InformaticsMatters/squonk2-data-manager-ui/workflows/release/badge.svg)\n\n[![test](https://github.com/InformaticsMatters/squonk2-data-manager-ui/actions/workflows/test.yaml/badge.svg)](https://github.com/InformaticsMatters/squonk2-data-manager-ui/actions/workflows/test.yaml)\n\n![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/InformaticsMatters/squonk2-data-manager-ui)\n\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/informaticsmatters/squonk2-data-manager-ui)\n\n## API Compatibility\n\nThe Data Manager UI will usually only work with specific API versions. A major version bump in the UI (E.g. 1.x to 2.y) will correspond to a major version change in either the data-manager API or the account-server API.\n\n### Compatibility Table\n\n| UI  | DM API | AS API |\n| --- | ------ | ------ |\n| 1   | 1      | 1      |\n| 2   | 1      | 2      |\n| 3   | 2      | 2      |\n| 4   | 3      | 3      |\n| 5   | 4      | 4      |\n| 6   | 5      | 4      |\n\n---\n\n## Changes\n\nCheckout the releases for the latest changes or look at [CHANGELOG.md](CHANGELOG.md).\n\n## Development\n\nThis project uses `pnpm`.\n\nNotable scripts:\n\n- `pnpm install` to install dependencies. This will also setup `husky` git hooks via the `postinstall` script.\n- `pnpm dev` starts the development server\n- `pnpm dev:debug` same as above but with the Node debugger running. Start the VSCode debugger to connect.\n- `pnpm build` will create a production build which includes type-checking and `eslint`\n- `pnpm start` starts the production server\n- `pnpm tsc` will run a one-off type check. This is also called pre-push to ensure no type errors are deployed.\n- `pnpm lint` will run the linter with the `eslint` config\n- `pnpm format` will format specified files with the `eslint` config\n- `pnpm test` will run the playwright tests\n- `pnpm test:debug` runs the tests with debug mode (headed)\n- `pnpm test:ci` runs the tests but configured for GitHub actions\n\nSee `package.json` for all available scripts.\n\n### Assets\nThe `/assets` folder is a Git subtree. Manage this with the following commands.\n```bash\n# Add the subtree\ngit subtree add --prefix assets git@github.com:InformaticsMatters/squonk-assets.git main --squash\n\n# Update the subtree when needed\ngit subtree pull --prefix assets git@github.com:InformaticsMatters/squonk-assets.git main --squash\n```\n\n## Testing\n\nThis project uses [Playwright](https://playwright.dev/) for integration and e2e testing. To get this setup install all dependencies:\n\n```bash\npnpm i\npnpm exec playwright install-deps\npnpm exec playwright install\n```\n\nThen run:\n\n- `pnpm t` to run the tests in headless mode\n- `pnpm test:debug` to run the tests headed in debug mode\n\n### Code Quality\n\nWe use a combination of `Husky`, `lint-staged` and `eslint` to format code to a standard style (see the `.eslintrc` file).\nChanged lines/files are formatted by when a `git commit` is made.\n\n## Building\n\nOfficial builds are handled by GitHub Actions and container images pushed\nto Docker-Hub. Refer to the `.github/workflows` files to see the official\nbuild commands, which can be run from the project clone to produce an\n[nginx] web-container: -\n\n    $ docker build . \\\n        --build-arg GIT_SHA=$(git rev-parse HEAD) \\\n        --tag informaticsmatters/squonk-data-manager-ui:latest\n\nDeployment to Kubernetes is handled by our AWX-compliant [Ansible playbook repo].\n\n## Local/alternative configuration\n\nA `.env` file is injected by Kubernetes at run-time that provides values\nfor numerous environment variables. The `.env.*` used at build time is\n`.env.staging`, but this can be changed by using the build-arg `FLAVOUR`.\nNextJS loads `.env.*` files different depending on the Node environment. Read more\n[here](https://nextjs.org/docs/basic-features/environment-variables#default-environment-variables).\nBuild the image using\n\n    $ docker build . \\\n        --build-arg FLAVOUR=local.example \\\n        --build-arg GIT_SHA=$(git rev-parse HEAD) \\\n        --build-arg BASE_PATH=\"\" \\\n        --tag informaticsmatters/squonk-data-manager-ui:latest\n\nWhich can then be started on `http://localhost:8080/data-manager-ui` with: -\n\n    $ docker run --rm --detach --publish 8080:3000 \\\n        informaticsmatters/squonk-data-manager-ui:latest\n\nIn local development the `.env.*` can be loaded by copying it into the container and\ncommitting it as a image.\n\n1. Crate the container: `docker create --name foo-tmp \u003ctemp-tag-name\u003e`\n2. Copy the `.env.*` into the container: docker cp .env.\u003cFLAVOUR\u003e foo-tmp:/app\n3. Commit the container as a new image: `docker commit foo-tmp \u003cnew-tag-name\u003e`\n4. Run this image as above\n\n## Releases\n\nWe use [semantic-release](https://semantic-release.gitbook.io/) with conventional commits:\n\n- `dev` branch → prerelease tags `X.Y.Z-dev.N` (no `v` prefix), GitHub prereleases, changelog updates, Docker image push, AWX test deployment.\n- `master` branch → stable tags `X.Y.Z` (no `v` prefix), GitHub releases, changelog updates, Docker image push (including `:stable`), AWX production deployment.\n- `package.json` version is kept in sync by semantic-release; no manual bumping.\n\nWorkflow summary:\n\n- `release.yml` runs on pushes to `dev` and `master`, runs semantic-release, pushes tags, builds/pushes Docker images, and triggers AWX (test for prerelease, prod for stable).\n- `build.yaml` runs a non-pushing build on non-master branch pushes for sanity checks.\n\nIf you need a manual prerelease bump, use a conventional commit on `dev`; semantic-release will compute the next `X.Y.Z-dev.N` automatically.\n\n## Devcontainers\n\nDue to the use of [MDX](https://mdxjs.com/) and the node-dependent release mechanism, you will need a full development environment to verify changes by using the development server and to run tests. To aids in this, we provide a [devcontainer config file](.devcontainer/devcontainer.json) that sets up the needed Node dependencies and allows you to run the tests and dev server. You may open this dev container in browser or inside a supported editor of your choice given you can run the container on your system. It's recommended you use the `+ New with options` option (from the … menu) when starting your codespace so that you can enter the required secrets to get the app running against APIs.\n\n---\n\n[ansible playbook repo]: https://github.com/InformaticsMatters/squonk2-data-manager-ui-ansible\n[nginx]: https://hub.docker.com/_/nginx\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finformaticsmatters%2Fsquonk2-data-manager-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finformaticsmatters%2Fsquonk2-data-manager-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finformaticsmatters%2Fsquonk2-data-manager-ui/lists"}