We're proud to announce the first beta release of Infrahub 🎉 🚀
This release is packed with a lot of new features and improvements and it indicates that infrahub is ready to be part of your day to day workflow. Moving forward our goal is to provide a migration path to the future releases without a need to rebuild the system or losing data. It's also possible now to update an existing schema and infrahub will take care of migrating the data.
Main Changes
Unified Storage
Schema Update & Migrations
It's now possible to update the schema without losing data. Infrahub will automatically apply the validations and the migrations to ensure the data currently in the database is compliant with the new schema.
The validations and the migrations will also be applied :
- As part of a Proposed Change
- During a branch rebase
- During a branch merge
Non Isolated Branches
The default behavior for a branch has been updated to keep in sync with the main branch by default.
With this new behavior, all changes applied to the main branch will automatically be visible in the branches without the need for rebase.
A new isolated branch mode has been introduced. It allows a branch to be isolated from the main branch. Isolated branches are not kept in sync with the changes in the main branch.
With these changes, the rebase
flag in the API and in the transformations has been deprecated.
The flag data_only
on a branch has been renamed to sync_with_git
to provide a better description of its intent.
The meaning of this flag has been switched so is_data_only=true
is the same as sync_with_git=false
.
Additional Constraints for the Schema
A few additional constraints have been added to the schema to enforce your business logic.
multiple uniqueness constraints
On a Node or a Generic, it's now possible to define one or multiple uniqueness constraints composed of multiple attributes or relationships of cardinality one.
In the example below, all Interfaces will be guaranteed to be unique based on their name and the device they are connected to.
- name: Interface
namespace: Infra
uniqueness_constraints:
- [ "device", "name__value"]
attributes:
- name: name
kind: Text
relationships:
- name: device
cardinality: one
peer: InfraDevice
kind: Parent
min_max / max_count for relationships
On a relationship of cardinality many, it's now possible to define a minimum or maximum number of peers that should be present.
relationships:
- name: "tags"
cardinality: "many"
peer: "BuiltinTag"
max_count: 5
min_count: 2
New Version of the Data & Time Picker
The widget to select the active date and time has been updated to improve its usability.
In addition to this change, all edits have been disabled while viewing past data to avoid any confusions and guarantee the immutability of the database.
CI Pipeline
The CI Pipeline as part of a Proposed Change has been significantly improved to provide more visibility to the user.
New version of the Check View
The page to display the progression and the results of the checks has been redesigned to provide more visibility.
Background Tasks
Information about background pipeline tasks are now available in the Tasks tab of the proposed change view.
Schema
Schema Visualizer
The Schema page in the frontend has been redesigned to make it easier to navigate the current schema.
All information are now accessible, in the future the page will be updated to modify the schema directly from the frontend as well.
Schema Documentation
The internal schema has been refactored in order to generate better documentation and to be able to provide better validation of new schema.
A new definition of the internal schema has been published in JSONSchema format and it's accessible at https://schema.infrahub.app/infrahub/schema/latest.json
Multiple Editors are able to leverage this file to provide inline documentation and validation.
In VS Code, the YAML Plugin support file with the yaml-language-server
marker at the top of the file.
# yaml-language-server: $schema=https://schema.infrahub.app/infrahub/schema/latest.json
---
version: '1.0'
generics:
- name: Interface
namespace: Infra
API / GraphQL
New DiffSummary query
The GraphQL query DiffSummary
has been refactored to expose more information, it's now possible to query information about the attributes and the relationships in addition to the nodes.
The previous version of the Query has been migrated to DiffSummaryOld
and it will be removed in the next release.
Other
Enhanced Search Bar
The search bar has been enhanced to return more information. In addition to the objects, it's now possible to search the documentation and to navigate directly to other pages in the frontend.
The search results view has also been redesigned to make it faster and more accessible.
Performance Improvement
The processing of the schema internally has been significantly improved and as a result:
- Accessing the schema is 5x to 10x faster
- Loading a new schema is 3x faster
- Loading the frontend for the first time is significantly faster too
Sync Engine
The Synchronization Engine has been improved to be able to run in standalone mode and it has been integrated with Dagster, to provide more visibility into the process and leverage its orchestration capabilitites.
The project has been packaged as a dedicated Python package and it's now available on PyPI infrahub-sync
.
Documentation Update
There have been multiple improvements to the documentation, including:
- A new topic page about Immutability and Version Control
- A new topic page about the Resources testing framework
- A new guide on how to create your own schema
- The Python SDK section has been reorganized to have Guides, a Reference, and include more information
Changelog
🚀 Features
- In search anywhere, action "Go to" search in menu items @bilalabbad (#2628)
- Improved long text display in details view @bilalabbad (#2600)
- Prevent user from editing data from the past @bilalabbad (#2597)
- Add support for schema migrations during Branch Rebase @dgarros (#2577)
- Update date display for dates older than 7 days @pa-lem (#2599)
- Add UserTask to provide more visibility into branch mutations @dgarros (#2576)
- Redesigned time selector to indicate current view time @bilalabbad (#2556)
- extend DiffSummary for use in constraint determination @ajtmccarty (#2541)
- Fix inconsistency issues with infrahubctl check @ogenstad (#2557)
- Add Schema migrations : node.kind.update, node.attribute.remove & attribute.name.update @dgarros (#2558)
- Branch isolated mode @pa-lem (#2535)
- Add support for deleting and renaming existing element of the schema @dgarros (#2539)
- Removed related node column from tasks in tab @bilalabbad (#2536)
- Allow dumping and loading many-to-many relationships @gmazoyer (#2503)
- on a generic list view, display kind for each item @bilalabbad (#2534)
- feat(backend): enable gzip middleware @fatih-acar (#2528)
- Add support for database constraints @dgarros (#2460)
- Change default branch behavior and add isolated mode @dgarros (#2461)
- Redesigned Schema visualizer @bilalabbad (#2467)
- new node hierarchy (parent/children) constraint validator @ajtmccarty (#2447)
- Attribute kind constraint validator @ajtmccarty (#2494)
- Allow excluding kinds when using
infrahubctl dump
@gmazoyer (#2488) - Grouped uniqueness constraint for node mutations @ajtmccarty (#2307)
- feat(sdk): add infrahubctl version command @wvandeun (#2429)
- update count constraint validator for cardinality @ajtmccarty (#2416)
- Code editor dark mode @pa-lem (#2439)
- Documentation on seach anywhere @bilalabbad (#2270)
- new relationship count constraint validator @ajtmccarty (#2410)
- Update checks UI #2: Checks summary @pa-lem (#2405)
- new constraint validator for attribute min and max length @ajtmccarty (#2394)
- new constraint validator for update to Relationship.peer @ajtmccarty (#2393)
- Limit artifact definition creation in pipeline for unmodified repos @ogenstad (#2407)
- Update checks UI #1: accordion and popover @pa-lem (#2390)
- constraint validator for AttributeSchema.enum @ajtmccarty (#2382)
- new constraint validator for update to AttributeSchema.choices @ajtmccarty (#2365)
- new constraint validator for update to AttributeSchema.optional @ajtmccarty (#2364)
🐛 Bug Fixes
- added page name in breadcrumb of search docs results @bilalabbad (#2631)
- Fix initial value for JSON attributes in form @pa-lem (#2629)
- Add integrations tests for schema migrations related to relationships and attributes @dgarros (#2623)
- Prevent overflow on sidebar menu @bilalabbad (#2626)
- Refetch object details on mount relationships view @pa-lem (#2624)
- fix some links in docs @bilalabbad (#2610)
- Assign display_labels from generics if missing @ogenstad (#2590)
- Fix SDK failure due to missing extras @gmazoyer (#2601)
- add decorator to retry self managed database transaction @dgarros (#2516)
- Fix non visible highlighted text from browser search in code editor @pa-lem (#2581)
- Select 2 steps fix for creation @pa-lem (#2588)
- Use menu icon from schema for statically placed objects @ogenstad (#2578)
- Fixed a generic relationship displaying only 1 column @bilalabbad (#2582)
- Fix proposed changes actions @pa-lem (#2579)
- Fix add node to group @pa-lem (#2575)
- Fix multi select @pa-lem (#2545)
- Move git-agent init below db init @ogenstad (#2568)
- Forbid a node to be placed under itself in the menu + forbid cyclic menu placements @gmazoyer (#2538)
- Page content use full height by default @bilalabbad (#2525)
- fix S3 storage config settings @wvandeun (#2527)
- Re add "data" key within query response for Jinja2 rendering @ogenstad (#2497)
- Fix logging call and add tests to cancel operation @ogenstad (#2428)
- Add worker specific callback queues to git-agents @ogenstad (#2391)
- Convert data to dict if it is
None
due to empty yaml file @ogenstad (#2357) - Refresh local registry on all workers when branch is rebased @ogenstad (#2360)
- Forbid changes on proposed changes in merged/canceled states @ogenstad (#2366)
- fix partial_match support in Graphql @ajtmccarty (#2363)
🧰 Maintenance
- Fix empty form values to remove object data @pa-lem (#2637)
- Update screenshots for the doc @pa-lem (#2640)
- chore: use registry image by default @fatih-acar (#2617)
- Add repository to pipeline tests with additional verifications @ogenstad (#2636)
- Add repository integration test @ogenstad (#2632)
- Add documentation for schema update and migrations @dgarros (#2615)
- Remove infrahubctl branch diff command @dgarros (#2616)
- Initial integrationtest for proposed change @ogenstad (#2622)
- Fix branch selector options for has schema changes icon @pa-lem (#2621)
- Fix proposed changes form required fields @pa-lem (#2608)
- Fix vulnerabilities from npm @pa-lem (#2614)
- Update branch selector and time selector colors @pa-lem (#2605)
- Update generic column @pa-lem (#2598)
- Rename Branch.is_data_only -> Branch.sync_with_git @ogenstad (#2570)
- Remove ignores for ruff INP rules @ogenstad (#2571)
- Fix error classes not having the
Error
suffix @gmazoyer (#2569) - Add task reports to Python checks @ogenstad (#2543)
- fix(api): do not duplicate objects in get_menu @fatih-acar (#2566)
- fix(core): exclude filters from hash calculation @fatih-acar (#2560)
- Remove deprecated data types @gmazoyer (#2553)
- Python SDK dependency cleanup @gmazoyer (#2290)
- Remove "at" param from create and update methods on Node @ogenstad (#2554)
- Remove deprecated method for schema generation @ogenstad (#2547)
- Add CI step to validate files generated for the backend @ogenstad (#2550)
- Remove old imports @ogenstad (#2552)
- Checks updates @pa-lem (#2531)
- Remove ability to change the default branch after initialization @ogenstad (#2533)
- Migrate node schemas to new format @ogenstad (#2530)
- Add High Availability diagram @dgarros (#2523)
- fix(core): improve get schema performance @fatih-acar (#2518)
- move DiffPayload and company from API to core @ajtmccarty (#2512)
- Improved classname management utility function @bilalabbad (#2517)
- Remove rebase property from ProposedChangeArtifactDefinition @ogenstad (#2520)
- Convert Relationship schema to generated type @ogenstad (#2519)
- Proposed changes updates @pa-lem (#2489)
- Upgrade Python Dependencies @dgarros (#2499)
- fix(graphql): improve generate performance @fatih-acar (#2505)
- Split attribute schema to allow for generated fields @ogenstad (#2469)
- Add route to avoid masking 404 errors @ogenstad (#2468)
- Remove the attribute type from Attribute and AttributeValue @dgarros (#2401)
- Add description attribute to proposed change @ogenstad (#2442)
- Add more details to repository checks @ogenstad (#2435)
- Show number of impacted artifacts in a proposed change @ogenstad (#2426)
- Remove old database code @ogenstad (#2411)
- Remove global statement for validated_database @ogenstad (#2392)
- Add initial task report to schema integrity @ogenstad (#2404)
- Remove the label AttributeLocal on Attribute Node @dgarros (#2402)
- Enable ruff rule PLC1901 @ogenstad (#2400)
- Work on type hints for core.schema @ogenstad (#2399)
- Set encoding mode for open @ogenstad (#2398)
- Remove group mutations @ogenstad (#2395)
- Add test for Branch delete, move tests to separate folders @ogenstad (#2396)
- Split apart infrahub.core.schema into smaller parts @ogenstad (#2378)
- Adds initial task logs for request.proposed_change messages @ogenstad (#2389)
- Fix type hints for core.branch @ogenstad (#2383)
- Fix type-hints for api.schema @ogenstad (#2384)
- Add task_log to proposed change pipeline @ogenstad (#2372)
- Tasks pagination fix + tasks in proposed changes @pa-lem (#2374)
- Task tab only for CoreTaskTarget inheritance @pa-lem (#2369)