{"id":25808138,"url":"https://github.com/nullstone-io/iac","last_synced_at":"2026-06-16T07:31:19.438Z","repository":{"id":188810277,"uuid":"679395674","full_name":"nullstone-io/iac","owner":"nullstone-io","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-20T20:57:59.000Z","size":184,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-20T22:39:21.039Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/nullstone-io.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":"2023-08-16T18:34:03.000Z","updated_at":"2026-04-20T20:58:02.000Z","dependencies_parsed_at":"2023-11-27T00:27:47.844Z","dependency_job_id":"0be437d0-f5c7-4c55-9e1e-d385799399f1","html_url":"https://github.com/nullstone-io/iac","commit_stats":null,"previous_names":["nullstone-io/iac"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nullstone-io/iac","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nullstone-io%2Fiac","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nullstone-io%2Fiac/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nullstone-io%2Fiac/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nullstone-io%2Fiac/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nullstone-io","download_url":"https://codeload.github.com/nullstone-io/iac/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nullstone-io%2Fiac/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34394376,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2025-02-27T21:59:17.760Z","updated_at":"2026-06-16T07:31:19.404Z","avatar_url":"https://github.com/nullstone-io.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IaC\n\nThis package synchronizes IaC configuration files with Nullstone configuration.\n\n## Implementation Todos\n- [] Synchronize new blocks defined in IaC files\n- [] Add support for `datastores` stanza\n- [x] Validate overrides file\n- [x] Provide validation errors to user if connection target does not exist\n- [x] Resolve connections to domains (`global.global.\u003cdomain\u003e`)\n- [] Resolve connections to other stacks/envs\n- [] Add support for changing capability connections\n\n## How does it work?\n\nThis library is used primarily by iac.ApplyConfig located in the `nullfire` repo,\nwhich synchronizes IaC files against blocks stored in the database (`nullfire` and `furion`).\nThis entails a synchronization of 3 sources:\n- Database (a user configured through the UI)\n- Primary IaC file (`.nullstone/config.yml` in the git repo)\n- Overrides IaC file (`.nullstone/\u003cenv\u003e.yml` or `.nullstone/previews.yml` in the git repo)\n\nThis library is intended to be used by `enigma` as well as `nullstone` to parse and validate IaC files.\n\n### Conflict Resolution\n\nConflicts and weird behavior can arise when synchronizing these 3 sources.\n\nFor example, if a user removes a block from their primary IaC file, they could expect one of two outcomes:\n1. The block is destroyed, then deleted.\n2. They intended to move the block to an IaC file in another repo.\n   In this scenario, if we followed #1 and destroyed/deleted a postgres cluster, this could be disastrous.\n\nThis is how Terraform currently works; however, we have given our users an expectation that GitOps should automatically resolve these types of issues.\nAs a result, we should follow these design principles:\n- Use docker-compose as a design compass (It is widely used and users are familiar with the design)\n- An authorized user should have the ability to approve/reject destruction.\n- A user can easily/rapidly validate and correct issues with their IaC files.\n\n### High-Level Process\n\nNullstone runs through a multi-stage process to synchronize configuration.\n1. Validate (provide validation errors back to user)\n    1. Validate primary+overrides IaC file\n    2. Build list of new blocks, changes in IaC ownership\n    3. Resolve primary+overrides connections\n2. Add new blocks\n3. Apply changes to IaC ownership\n4. Apply primary IaC file to desired changes\n    1. Apply variables\n    2. Apply env variables\n    3. Apply connections\n5. Apply overrides IaC file to desired changes\n    1. Apply variables\n    2. Apply env variables\n    3. Apply connections\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnullstone-io%2Fiac","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnullstone-io%2Fiac","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnullstone-io%2Fiac/lists"}