Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1330 commits
Select commit Hold shift + click to select a range
0c96ec5
perf(network): reuse managers for network name reads
Soulusions Oct 10, 2026
5e29847
perf(network): reuse managers for matching network reads
Soulusions Oct 10, 2026
8471356
perf(itil): reuse managers for cost summary reads
Soulusions Oct 10, 2026
fd87845
style(database): format network name and cost queries
Soulusions Oct 10, 2026
45ed49b
fix(ci): retry Redis extension installation once
Soulusions Oct 10, 2026
64c757b
refactor(orm): make all mapped entities own their current schemas
Soulusions Oct 10, 2026
bac8095
refactor(persistence): scope materialized domain reads to their conne…
Soulusions Oct 10, 2026
e026d31
fix(orm): resolve legacy owners before applying insertion defaults
Soulusions Oct 10, 2026
1fc980c
test(project): bind linked-duration assertions to the application model
Soulusions Oct 10, 2026
285fc1b
refactor(orm): load registry declarations without an entity manager
Soulusions Oct 10, 2026
c628c90
fix(schema): verify fallback authentication policies from entity meta…
Soulusions Oct 10, 2026
41ae922
refactor(persistence): scope document reads and supplier reply ownership
Soulusions Oct 10, 2026
06e01cf
fix(cache): recover translation misses across PHP runtimes
Soulusions Oct 10, 2026
3b3a330
test(cache): use the installed virtual filesystem fixture API
Soulusions Oct 10, 2026
4570e94
refactor(notifications): reuse scoped connection managers for materia…
Soulusions Oct 10, 2026
86a8ebd
feat(validation): query approval assignments through owning associations
Soulusions Oct 10, 2026
5cc7a0e
refactor(cartridges): select stock alerts through the owning repository
Soulusions Oct 10, 2026
0caf4c8
refactor(tickets): count directional children through owning relation…
Soulusions Oct 10, 2026
32689e0
refactor(network): materialize VLAN membership through owning associa…
Soulusions Oct 10, 2026
b288e8e
refactor(domains): count asset and category links through domain owne…
Soulusions Oct 10, 2026
ee6ba56
feat(schema): derive native index and check policies from owning decl…
Soulusions Oct 10, 2026
46c488e
style(php): format scoped persistence and native schema policies
Soulusions Oct 10, 2026
496cb34
feat(schema): declare and inspect inherited reference constraints on …
Soulusions Oct 10, 2026
3a4f3b8
style(schema): format declared native reference policy checks
Soulusions Oct 10, 2026
a17fc7f
test(network): use canonical network notation in VLAN fixtures
Soulusions Oct 10, 2026
4011a77
fix(schema): recognize native PostgreSQL reference array coercion
Soulusions Oct 10, 2026
bc470db
fix(orm): retain read failures across shared manager cleanup
Soulusions Oct 10, 2026
ccc2179
refactor(session): reuse scoped authorization read managers
Soulusions Oct 10, 2026
afae5c5
refactor(i18n): materialize translation reads with scoped managers
Soulusions Oct 10, 2026
9d0174a
refactor(itil): query ticket links through owning associations
Soulusions Oct 10, 2026
7958c98
fix(schema): verify PostgreSQL array checks across supported versions
Soulusions Oct 10, 2026
254d16d
refactor(orm): query linked ITIL tasks through owning associations
Soulusions Oct 10, 2026
07b3e81
refactor(orm): reuse the accessibility preference reader
Soulusions Oct 10, 2026
fa88d84
refactor(orm): materialize RSS audience links within owned reads
Soulusions Oct 10, 2026
6fdcad0
refactor(orm): reuse scoped software license quantity reads
Soulusions Oct 10, 2026
56d4237
refactor(orm): retain contact read scopes and caller ownership
Soulusions Oct 10, 2026
99e2a09
test(orm): exercise scoped links with valid native fixtures
Soulusions Oct 10, 2026
9e7cf66
refactor(orm): materialize profile assignment restrictions
Soulusions Oct 10, 2026
fed00ba
refactor(orm): project ticket task tabs through owning links
Soulusions Oct 10, 2026
6972587
fix(orm): disambiguate scoped ticket links and verify rendered cells
Soulusions Oct 10, 2026
792d61f
test(orm): verify directional title cells and denied links
Soulusions Oct 10, 2026
f71c24a
refactor(orm): reuse completed directory selection reads
Soulusions Oct 10, 2026
d46153b
refactor(orm): scope materialized link itemtype reads
Soulusions Oct 10, 2026
d9d18b4
fix(database): retain nullable language keys on PHP 8.5
Soulusions Oct 10, 2026
c65f249
refactor(database): query parsed IP addresses through their repository
Soulusions Oct 10, 2026
bf5f125
fix(network): match the complete IPv6 address identity
Soulusions Oct 10, 2026
65c3886
refactor(document): read upload extensions through their repository
Soulusions Oct 10, 2026
0f486e7
refactor(software): reuse the assignment owner for lock snapshots
Soulusions Oct 10, 2026
53b287a
refactor(database): materialize OS assignments with their read owner
Soulusions Oct 10, 2026
35c09c6
refactor(asset): query active computer links through their repository
Soulusions Oct 10, 2026
11278de
test(asset): roll back link probes before ordered hook assertions
Soulusions Oct 10, 2026
102fa3c
refactor(reminder): materialize calendar and expiry reads
Soulusions Oct 10, 2026
1340c0d
test(reminder): assert persisted planning fields after public add
Soulusions Oct 10, 2026
60cc73d
refactor(display): share owners for completed preference reads
Soulusions Oct 10, 2026
5dfd148
refactor(account): project interface preferences through repository
Soulusions Oct 10, 2026
2df34f5
refactor(notification): project entity administrator contact
Soulusions Oct 10, 2026
4179b53
refactor(notification): project saved search alert events
Soulusions Oct 10, 2026
fdab874
refactor(notification): project chat configuration settings
Soulusions Oct 10, 2026
76adcec
fix(notification): retain empty choice defaults on PHP 8.5
Soulusions Oct 10, 2026
b8007c2
refactor(api): select mapped collections through ORM
Soulusions Oct 10, 2026
d8f7964
test(api): register collection tests against API class
Soulusions Oct 10, 2026
7b54ae2
test(api): select authorized scope for root netpoint fixture
Soulusions Oct 10, 2026
b4769ee
feat(orm): enforce network and computer component ownership
Soulusions Oct 10, 2026
7d4725c
refactor(orm): reuse completed software version read ownership
Soulusions Oct 10, 2026
9bddc57
fix(project): apply finished-state filter to ticket chooser
Soulusions Oct 10, 2026
0cf2c42
refactor(orm): retain selected read ownership across count stages
Soulusions Oct 10, 2026
eda9648
test(database): cover current owning mappings and full migration replay
Soulusions Oct 10, 2026
1cd4dea
ci(database): retain MySQL native constraint diagnostics
Soulusions Oct 10, 2026
5057494
fix(database): preserve native checks and seed retry fixtures
Soulusions Oct 11, 2026
06f9d14
refactor(database): project component form values through repositories
Soulusions Oct 11, 2026
5b60831
test(database): repair custom connection and identify rejected mutations
Soulusions Oct 11, 2026
44b439c
fix(database): distinguish boolean literals from quoted identifiers
Soulusions Oct 11, 2026
dd489dd
refactor(database): reuse scoped ownership for project reads
Soulusions Oct 11, 2026
9f68f09
refactor(database): count accessible licenses through their repository
Soulusions Oct 11, 2026
daf5e5e
refactor(database): project network outlets for location tabs
Soulusions Oct 11, 2026
fbd778d
refactor(database): own article category reads in the domain repository
Soulusions Oct 11, 2026
ea34788
test(database): trace native migration stages during CI
Soulusions Oct 11, 2026
0929d9c
style(tests): format imports and multiline assertions
Soulusions Oct 11, 2026
6968603
refactor(database): own authentication rule choices in repositories
Soulusions Oct 11, 2026
a8284ed
refactor(database): reuse scoped ownership for directory reads
Soulusions Oct 11, 2026
a59954b
test(database): verify generated null assignments preserve identities
Soulusions Oct 11, 2026
1658b76
refactor(database): reuse scoped ownership for comment reads
Soulusions Oct 11, 2026
50a79f9
refactor(database): own cartridge transfer reads in a domain repository
Soulusions Oct 11, 2026
4aec385
fix(database): import the category reader entity manager
Soulusions Oct 11, 2026
04c3b11
test(database): preserve project association iterator keys
Soulusions Oct 11, 2026
3d4446f
test(database): scope projection cleanup and type boolean fixtures
Soulusions Oct 11, 2026
5b59987
fix(database): retain component replacement ownership for open parents
Soulusions Oct 11, 2026
cd24b52
fix(database): preserve parent permission hooks and DNS clones
Soulusions Oct 11, 2026
8d832ed
chore(tests): remove captured migration timing diagnostics
Soulusions Oct 11, 2026
88f60d2
fix(database): normalize nullable component selection keys
Soulusions Oct 11, 2026
192ac49
fix(database): retain permission subjects and free component bindings
Soulusions Oct 11, 2026
b9391d2
refactor(database): reuse scoped ownership for audit appends
Soulusions Oct 11, 2026
fb62d6b
fix(database): clean private read ownership once per operation
Soulusions Oct 11, 2026
0b7b6d2
fix(network): preserve valid addresses when cloning IP records
Soulusions Oct 11, 2026
2d4fb3e
test(database): retain callback owners and provider metadata in fixtures
Soulusions Oct 11, 2026
792f3f2
test(database): assert actual comment labels and software permission …
Soulusions Oct 11, 2026
07e966c
refactor(database): own operator codes and query duplicates through DBAL
Soulusions Oct 11, 2026
2dc776f
refactor(database): project CalDAV group relations from owned mappings
Soulusions Oct 11, 2026
0eea0ba
refactor(database): reuse completed ownership for account reads
Soulusions Oct 11, 2026
65e0804
test(network): resolve real opaque parents through the public lifecycle
Soulusions Oct 11, 2026
3492505
style(database): clarify imports and DBAL query layout
Soulusions Oct 11, 2026
c660071
style(tests): finish account and opaque parent fixture formatting
Soulusions Oct 11, 2026
ea94359
ci: show actionable PHP formatting differences
Soulusions Oct 11, 2026
e2b2ce4
style(tests): follow PSR-12 for callback fixtures
Soulusions Oct 11, 2026
e32dba7
test(database): retain concrete adapters and provider query ownership
Soulusions Oct 11, 2026
b38c0eb
test(database): retain selected stock in unrestricted component lists
Soulusions Oct 11, 2026
1bfa7cc
test(caldav): initialize public HTTP and directory fixture state
Soulusions Oct 11, 2026
93afd67
test(database): assert mapped audit values and complete scoped fixtures
Soulusions Oct 11, 2026
99cbab7
style(tests): format remaining multiline permission call
Soulusions Oct 11, 2026
ad6edfe
test(audit): distinguish reader cleanup from writer ownership
Soulusions Oct 11, 2026
9e3f1c1
ci: verify schema after attempted application tests
Soulusions Oct 11, 2026
da92d10
refactor(database): complete rule reads within their manager owner
Soulusions Oct 11, 2026
ec6f0a7
refactor(transfer): materialize supplier contact projections before c…
Soulusions Oct 11, 2026
c75cc8d
refactor(database): scope profile permission readers to completed ope…
Soulusions Oct 11, 2026
90780c1
refactor(itil): derive activity counts from owning subject metadata
Soulusions Oct 11, 2026
f63913f
refactor(database): complete uniqueness configuration reads before va…
Soulusions Oct 11, 2026
2fd56bb
refactor(ticket): project incident links before rendering callbacks
Soulusions Oct 11, 2026
61598cd
refactor(ticket): complete asset cost reads before lifecycle updates
Soulusions Oct 11, 2026
acb3c00
refactor(project): complete notification document and asset reads
Soulusions Oct 11, 2026
8a632a3
fix(database): preserve literal text and explicit null in mapped writes
Soulusions Oct 11, 2026
f4c9a1e
fix(user): bind login identities as literal domain text
Soulusions Oct 11, 2026
5cfcce1
fix(database): retain literal text in uniqueness and blacklist checks
Soulusions Oct 11, 2026
69c616c
fix(transfer): retain literal cartridge names during destination lookup
Soulusions Oct 11, 2026
44414cf
fix(database): preserve tree text identities and reader cleanup failures
Soulusions Oct 11, 2026
d0550be
style(tests): keep incident-link imports in one group
Soulusions Oct 11, 2026
b29afd5
refactor(transfer): select outlet destinations through a typed reposi…
Soulusions Oct 11, 2026
def7601
refactor(api): project eligible client identities before authentication
Soulusions Oct 11, 2026
7c91990
refactor(notifications): finish attachment reads before template call…
Soulusions Oct 11, 2026
e16ad60
test(domain): match permission and actor command contracts
Soulusions Oct 11, 2026
b095135
test(users): use legal authentication tuples for ambiguous login names
Soulusions Oct 11, 2026
f0912ab
test(knowledge): use native null for untranslated language fixtures
Soulusions Oct 11, 2026
1b91038
test(tickets): assert the native adapter error for opaque identifiers
Soulusions Oct 11, 2026
5a921c4
test(trees): observe the actual recursive scope reader and transaction
Soulusions Oct 11, 2026
285782d
style(tests): keep transfer imports in one group
Soulusions Oct 11, 2026
ff22f7b
refactor(trees): finish child reads before recursive mutations
Soulusions Oct 11, 2026
92e1ac3
refactor(calendar): finish closure snapshots before display callbacks
Soulusions Oct 11, 2026
a3a4eca
feat(database): adopt additional firmware card and SIM owners
Soulusions Oct 11, 2026
9714d2b
refactor(rules): select LDAP attributes through owning criteria
Soulusions Oct 11, 2026
8cc4899
refactor(purge): reuse completed validation and audit owners
Soulusions Oct 11, 2026
3765169
feat(database): enforce remaining nonnullable flag domains
Soulusions Oct 11, 2026
e3d5ba8
test(database): compare schema after all ordered adoption stages
Soulusions Oct 11, 2026
b4bb5ad
test(permissions): assert exact granted and denied right masks
Soulusions Oct 11, 2026
fa1b400
refactor(software): complete dictionary reads before lifecycle mutations
Soulusions Oct 11, 2026
90db845
fix(networks): retain the selected writer during tree rebuilds
Soulusions Oct 11, 2026
d0ac838
fix(transfer): update owning Ethernet outlets and disconnect actual w…
Soulusions Oct 11, 2026
dae0846
feat(database): give computer notes an owning association
Soulusions Oct 11, 2026
154782e
fix(transfer): copy port children under the new owning asset
Soulusions Oct 11, 2026
a44b5ac
test(database): assert the complete migration release order
Soulusions Oct 11, 2026
1123b22
fix(database): snapshot DBAL column names during adoption
Soulusions Oct 11, 2026
9ed80e2
test(database): compare preserved indexes by their actual names
Soulusions Oct 11, 2026
eb1be1a
refactor(knowledge): complete revision reads before lifecycle writes
Soulusions Oct 11, 2026
25ef31b
test(transfer): distinguish printer assets from model entities
Soulusions Oct 11, 2026
34d5c48
ci: compile tracked PHP in both supported lint jobs
Soulusions Oct 11, 2026
9677422
refactor(statuses): project administration rows and count ticket usage
Soulusions Oct 11, 2026
c848d9f
fix(oidc): retain the selected writer through profile synchronization
Soulusions Oct 11, 2026
4ddb5f4
refactor(documents): complete reads before purge and collector callbacks
Soulusions Oct 11, 2026
cb1b4c3
fix(database): validate prepared flags before legacy filtering
Soulusions Oct 11, 2026
438566e
test(networks): configure generated route mocks directly
Soulusions Oct 11, 2026
8315adb
test(components): assert all expanded owner projections
Soulusions Oct 11, 2026
c20a628
fix(transfer): initialize copied ports before lifecycle dispatch
Soulusions Oct 11, 2026
93082d6
fix(software): preserve physical subjects for custom asset lifecycles
Soulusions Oct 11, 2026
697a3c4
fix(printers): preserve cartridge roles through populated clones
Soulusions Oct 11, 2026
8fb7b8f
style(php): apply formatter layout to ownership changes
Soulusions Oct 11, 2026
82ce3d6
refactor(networks): complete aggregate reads before rendering
Soulusions Oct 11, 2026
ae85b81
refactor(networks): project alias origin choices with native port IDs
Soulusions Oct 11, 2026
6703e9d
test(database): snapshot ledger once per interrupted stage observation
Soulusions Oct 11, 2026
2ed9c50
refactor(cartridges): reuse the selected manager for stock mutations
Soulusions Oct 11, 2026
2ebffd1
test(documents): seed content hashes after the public upload guard
Soulusions Oct 11, 2026
3238edb
refactor(transfer): preserve supplier links and task family ownership
Soulusions Oct 11, 2026
06a45e9
test(database): reach late flag validation with a distinct operator f…
Soulusions Oct 11, 2026
a8597da
fix(database): scope singleton subject checks to their owning table
Soulusions Oct 11, 2026
85b60da
refactor(inventory): complete virtual machine reads before rendering
Soulusions Oct 11, 2026
2782d6f
test(network): create aggregate children and retain deleted origins
Soulusions Oct 11, 2026
4fe21e1
fix(transfer): move ITIL parents before supplier retargeting
Soulusions Oct 11, 2026
89bd251
refactor(transfer): model supplier ownership decisions
Soulusions Oct 11, 2026
5fc2168
test(network): use owning port keys and legacy boolean values
Soulusions Oct 11, 2026
2fcd7b9
refactor(racks): reuse completed placement read ownership
Soulusions Oct 11, 2026
a0eb87d
fix(database): validate sanitized item kinds without constructing models
Soulusions Oct 11, 2026
0da8668
refactor(network): select MAC port identities through DBAL
Soulusions Oct 11, 2026
77665bb
style(tests): format anonymous item-kind probe constructor
Soulusions Oct 11, 2026
6b68162
refactor(cartridges): reuse completed stock table read ownership
Soulusions Oct 11, 2026
fe9783b
fix(cartridges): average the printed pages from valid counters
Soulusions Oct 11, 2026
df5a291
refactor(mail): reuse completed local corpus reads
Soulusions Oct 11, 2026
250c96f
fix(racks): render PDU placement selectors
Soulusions Oct 11, 2026
0abe50a
fix(tests): finish supplier seed ownership between transfer cases
Soulusions Oct 11, 2026
1d2035c
refactor(network): remove speculative MAC persistence fallback
Soulusions Oct 11, 2026
1302da3
refactor(api): remove speculative authentication persistence fallbacks
Soulusions Oct 11, 2026
9e1cf16
refactor(documents): reuse completed attachment access reads
Soulusions Oct 11, 2026
26c1a2f
feat(database): own network ports and identifier parents
Soulusions Oct 11, 2026
87a6b79
refactor(network): keep VLAN mutations in their owning service
Soulusions Oct 11, 2026
158a284
refactor(financial): remove speculative menu loading fallback
Soulusions Oct 11, 2026
8a13695
refactor(entities): use one inherited configuration reader
Soulusions Oct 11, 2026
dfbd84b
refactor(database): remove unused repository branches
Soulusions Oct 11, 2026
64bd210
fix(database): quote PostgreSQL adoption catalog aliases
Soulusions Oct 11, 2026
8804fa9
fix(database): recognize literal MySQL database grants
Soulusions Oct 11, 2026
fd615dc
refactor(application): remove speculative core query fallbacks
Soulusions Oct 11, 2026
d584de3
refactor(application): use fixed computer and CalDAV readers
Soulusions Oct 11, 2026
05fa785
refactor(itil): remove speculative actor cost and timeline fallbacks
Soulusions Oct 11, 2026
93cc7e9
refactor(database): remove speculative read admission policies
Soulusions Oct 11, 2026
5342d0b
refactor(itil): use owning activity count queries
Soulusions Oct 11, 2026
d45dbb9
refactor(database): use one scoped blacklist query
Soulusions Oct 11, 2026
4765519
refactor(devices): remove unused criteria override detection
Soulusions Oct 11, 2026
67a59ab
refactor(rss): use one current audience projection
Soulusions Oct 11, 2026
473b781
refactor(users): use fixed login and timeline readers
Soulusions Oct 11, 2026
9891999
refactor(database): use current scalar record reads
Soulusions Oct 11, 2026
e048a71
style(php): remove obsolete reader imports
Soulusions Oct 11, 2026
34de8d2
test(database): remove obsolete read admission fixtures
Soulusions Oct 11, 2026
14717a9
refactor(database): discover statistics from mapped properties
Soulusions Oct 11, 2026
3fcc004
refactor(users): use one scalar display and history projection
Soulusions Oct 11, 2026
f591bb2
test(database): account for the published migration receipt
Soulusions Oct 11, 2026
8a807c9
refactor(dropdowns): use scalar reads with domain choice policies
Soulusions Oct 11, 2026
b445bf3
refactor(database): use one history and ITIL asset read path
Soulusions Oct 11, 2026
18d18c9
refactor(timeline): use one scalar count implementation
Soulusions Oct 11, 2026
a1cfe0f
refactor(software): use one scoped scalar rendering query
Soulusions Oct 11, 2026
88b988c
refactor(trees): remove the duplicate metadata point reader
Soulusions Oct 11, 2026
71055b4
refactor(database): use fixed scalar authorization readers
Soulusions Oct 11, 2026
f8907ca
refactor(database): require declared financial and VM projections
Soulusions Oct 11, 2026
2b3cee1
refactor(components): count declared families through one projection
Soulusions Oct 11, 2026
8ccfee7
refactor(database): use scoped appliance and link count queries
Soulusions Oct 11, 2026
49bc7c8
test(database): populate required identifier fixture fields
Soulusions Oct 11, 2026
84f506f
refactor(itil): use the declared promotion projection
Soulusions Oct 11, 2026
e7fa916
refactor(reservations): use one current user-row projection
Soulusions Oct 11, 2026
86fb3f3
refactor(computers): use declared link projections
Soulusions Oct 11, 2026
674fc60
refactor(database): remove dead fallback ownership helpers
Soulusions Oct 11, 2026
ace81e8
refactor(database): remove obsolete ORM absence emulation
Soulusions Oct 11, 2026
9eaaea2
refactor(components): remove empty reader cleanup scaffolding
Soulusions Oct 11, 2026
3f0cf24
fix(application): correct scalar fixtures and duplicate selector iden…
Soulusions Oct 11, 2026
d9f75c2
test(users): verify declared scalar conversions
Soulusions Oct 11, 2026
24d8a88
fix(transfers): retarget computer attachments through owning fields
Soulusions Oct 11, 2026
87c4bea
fix(users): read accessibility fonts through typed preferences
Soulusions Oct 11, 2026
4df49e6
fix(assets): allow fields initialization during parent forwarding
Soulusions Oct 11, 2026
cc9bc69
test(database): preserve current reads without synthetic hydration paths
Soulusions Oct 11, 2026
7090799
test(database): reuse fresh migration observations within assertions
Soulusions Oct 11, 2026
8244e60
refactor(database): unify translation name lookup criteria
Soulusions Oct 11, 2026
fe4d359
fix(transfer): retain source attachments when copying devices
Soulusions Oct 11, 2026
b4dbf27
test(database): assert current bindings and real read contracts
Soulusions Oct 11, 2026
63a28d0
test(database): give registered identifier parents explicit entity sc…
Soulusions Oct 11, 2026
c237d24
perf(database): install missing foreign keys per table
Soulusions Oct 11, 2026
a74c56b
fix(transfer): inspect the actual computer endpoint before disconnecting
Soulusions Oct 11, 2026
9c6a828
perf(database): batch fresh publication receipt observations
Soulusions Oct 11, 2026
5435671
refactor(appliance): consolidate import and scoped persistence
Soulusions Oct 12, 2026
05fa6c1
perf(database): avoid duplicate MariaDB JSON introspection
Soulusions Oct 12, 2026
ca9cb12
fix(database): address review and consolidate the ORM transition
Soulusions Oct 13, 2026
9ed720a
merge main while preserving ORM authentication fixes
Soulusions Oct 13, 2026
fefc282
perf(database): reuse warm metadata and finalize migration checks
Soulusions Oct 13, 2026
add62da
test(database): correct native fixtures and upgrade diagnostics
Soulusions Oct 13, 2026
473cf3f
test(database): assert device lifecycle independently of SQL logging
Soulusions Oct 13, 2026
44d8fcb
perf(migration): batch ordered membership parent validation
Soulusions Oct 13, 2026
e447447
test(search): isolate IP sorting from the legacy join limit
Soulusions Oct 13, 2026
be55bc0
fix(migration): preserve executable MySQL native definitions
Soulusions Oct 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .github/actions/docker-compose-app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,16 @@ services:
build:
context: "${APPLICATION_ROOT}"
dockerfile: ".github/actions/images/app/Dockerfile"
target: app
args:
PHP_VERSION: "${TEST_PHP_VERSION:-8.2}"
image: "${PHP_IMAGE:-itsm-tests-app:local}"
pull_policy: build
working_dir: "/var/itsm"
command: ["sleep", "infinity"]
environment:
TEST_DB_NAME: "${TEST_DB_NAME:-glpi}"
TEST_DB_TYPE: "${TEST_DB_TYPE:-mysql}"
CODE_COVERAGE: "${CODE_COVERAGE:-false}"
volumes:
- "${APPLICATION_ROOT}:/var/itsm:z"
Expand Down
27 changes: 25 additions & 2 deletions .github/actions/docker-compose-e2e.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
services:
app:
environment:
GLPI_VAR_DIR: "${PLAYWRIGHT_VAR_DIR}"

app-web:
container_name: "app-web"
image: "${PHP_IMAGE:-itsm-tests-app:local}"
pull_policy: never
working_dir: "/var/itsm"
command: ["php", "-S", "0.0.0.0:8088", "tests/router.php"]
command: ["php", "-S", "127.0.0.1:8088", "tests/router.php"]
environment:
GLPI_VAR_DIR: "${PLAYWRIGHT_VAR_DIR}"
CODE_COVERAGE: "${CODE_COVERAGE:-false}"
depends_on:
- db
Expand All @@ -19,11 +25,28 @@ services:

e2e:
container_name: "e2e"
image: "${E2E_IMAGE:-mcr.microsoft.com/playwright:v1.59.1-jammy}"
build:
context: "${APPLICATION_ROOT}"
dockerfile: ".github/actions/images/app/Dockerfile"
target: e2e
args:
PHP_VERSION: "${TEST_PHP_VERSION:-8.2}"
image: "${E2E_IMAGE:-itsm-tests-e2e:local}"
pull_policy: build
working_dir: "/var/itsm"
command: ["sleep", "infinity"]
ipc: host
network_mode: "service:app-web"
environment:
GLPI_VAR_DIR: "${PLAYWRIGHT_VAR_DIR}"
PLAYWRIGHT_BASE_URL: http://127.0.0.1:8088
PLAYWRIGHT_DOMAIN_CONFIG: /var/itsm/tests/config
PLAYWRIGHT_APPLIANCE_CONFIG: /var/itsm/tests/config
PLAYWRIGHT_TRANSFER_CONFIG: /var/itsm/tests/config
PLAYWRIGHT_DROPDOWN_CONFIG: /var/itsm/tests/config
PLAYWRIGHT_SESSION_CONFIG: /var/itsm/tests/config
depends_on:
- app-web
volumes:
- "${APPLICATION_ROOT}:/var/itsm:z"
- "${APP_CONTAINER_HOME}:/home/itsm:z"
10 changes: 10 additions & 0 deletions .github/actions/docker-compose-postgres.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Native PostgreSQL settings for the existing test harness.
services:
db:
environment:
POSTGRES_DB: "${TEST_DB_NAME:-glpi}"
POSTGRES_USER: root
POSTGRES_PASSWORD: test
command: ["postgres", "-c", "max_locks_per_transaction=512"]
healthcheck:
test: ["CMD", "pg_isready", "-U", "root", "-d", "${TEST_DB_NAME:-glpi}"]
5 changes: 4 additions & 1 deletion .github/actions/docker-compose-services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,23 @@ services:
image: "${DB_IMAGE:-mariadb:10.11}"
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
MYSQL_DATABASE: "glpi"
MYSQL_DATABASE: "${TEST_DB_NAME:-glpi}"
shm_size: '1gb'
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "127.0.0.1", "-uroot"]
interval: 5s
timeout: 3s
retries: 20
dovecot:
profiles: [imap]
container_name: "dovecot"
build:
context: "${APPLICATION_ROOT}"
dockerfile: ".github/actions/images/dovecot/Dockerfile"
image: "${DOVECOT_IMAGE:-itsm-tests-dovecot:local}"
pull_policy: build
openldap:
profiles: [ldap]
container_name: "openldap"
image: "${OPENLDAP_IMAGE:-osixia/openldap:1.5.0}"
environment:
Expand Down
12 changes: 0 additions & 12 deletions .github/actions/docker-compose.sh

This file was deleted.

57 changes: 19 additions & 38 deletions .github/actions/images/app/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,49 +1,30 @@
FROM php:8.3-cli-bookworm
ARG PHP_VERSION=8.2
FROM php:${PHP_VERSION}-cli-bookworm AS app

ENV DEBIAN_FRONTEND=noninteractive

COPY --from=ghcr.io/mlocati/php-extension-installer:2 /usr/bin/install-php-extensions /usr/local/bin/

RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
curl \
default-mysql-client \
git \
libbz2-dev \
libcurl4-openssl-dev \
libfreetype6-dev \
libicu-dev \
libjpeg62-turbo-dev \
libldap2-dev \
libpng-dev \
libxml2-dev \
libxslt1-dev \
libzip-dev \
nodejs \
npm \
unzip \
zip \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu \
&& docker-php-ext-install -j"$(nproc)" \
bcmath \
bz2 \
exif \
gd \
intl \
ldap \
mysqli \
opcache \
pcntl \
pdo_mysql \
soap \
xsl \
zip \
&& pecl install apcu redis \
&& docker-php-ext-enable apcu redis \
&& rm -rf /var/lib/apt/lists/*
ca-certificates curl default-mysql-client git nodejs npm postgresql-client unzip zip \
&& rm -rf /var/lib/apt/lists/* \
&& install-php-extensions \
apcu bcmath bz2 exif gd intl ldap mysqli opcache pcntl \
pdo_mysql pdo_pgsql pgsql soap xsl zip

RUN install-php-extensions redis \
|| (sleep 5 && install-php-extensions redis)

RUN git config --system --add safe.directory /var/itsm

COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer

RUN useradd --create-home --home-dir /home/itsm --uid 1000 --shell /bin/bash itsm

WORKDIR /var/itsm

FROM app AS e2e

COPY --from=node:22-bookworm /usr/local/bin/node /usr/local/bin/node
RUN npx --yes playwright@1.59.1 install --with-deps chromium
13 changes: 4 additions & 9 deletions .github/actions/images/dovecot/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,18 @@ RUN apt-get update \
dovecot-pop3d \
&& rm -rf /var/lib/apt/lists/*

RUN useradd --create-home --home-dir /home/itsm --shell /bin/bash itsm \
&& useradd --create-home --home-dir /home/testuser --shell /bin/bash testuser \
&& echo 'itsm:applesauce' | chpasswd \
RUN useradd --create-home --home-dir /home/testuser --shell /bin/bash testuser \
&& echo 'testuser:applesauce' | chpasswd \
&& mkdir -p /home/itsm/Maildir/{cur,new,tmp} /home/testuser/Maildir/{cur,new,tmp} \
&& chown -R itsm:itsm /home/itsm \
&& chown -R testuser:testuser /home/testuser
&& install -d -o testuser -g testuser \
/home/testuser/Maildir \
/home/testuser/Maildir/cur /home/testuser/Maildir/new /home/testuser/Maildir/tmp

RUN sed -ri 's|^#?listen =.*$|listen = *, ::|' /etc/dovecot/dovecot.conf \
&& sed -ri 's|^#?mail_location =.*$|mail_location = maildir:~/Maildir|' /etc/dovecot/conf.d/10-mail.conf \
&& sed -ri 's|^#?disable_plaintext_auth =.*$|disable_plaintext_auth = no|' /etc/dovecot/conf.d/10-auth.conf \
&& sed -ri 's|^auth_mechanisms =.*$|auth_mechanisms = plain login|' /etc/dovecot/conf.d/10-auth.conf \
&& sed -ri 's|^ssl =.*$|ssl = no|' /etc/dovecot/conf.d/10-ssl.conf

COPY .github/actions/images/dovecot/getmail_maildir /usr/local/bin/getmail_maildir
RUN chmod +x /usr/local/bin/getmail_maildir

EXPOSE 143 110

CMD ["dovecot", "-F"]
11 changes: 0 additions & 11 deletions .github/actions/images/dovecot/getmail_maildir

This file was deleted.

12 changes: 0 additions & 12 deletions .github/actions/init_build.sh

This file was deleted.

38 changes: 8 additions & 30 deletions .github/actions/init_containers-start.sh
Original file line number Diff line number Diff line change
@@ -1,43 +1,21 @@
#!/bin/bash -e

ROOT_DIR=$(readlink -f "$(dirname "$0")/../..")
COMPOSE_CMD="$ROOT_DIR/.github/actions/docker-compose.sh"
#!/bin/bash
set -euo pipefail

echo "Init app container home"
mkdir -p $APP_CONTAINER_HOME
mkdir -p "$APP_CONTAINER_HOME"

echo "Build and start containers"
"$COMPOSE_CMD" up --build --detach
docker compose up --build --detach

if [[ "$UPDATE_FILES_ACL" = true ]]; then
if [[ "${UPDATE_FILES_ACL:-false}" = true ]]; then
echo "Change files rights to give write access to app container user"
sudo apt-get install --assume-yes --no-install-recommends --quiet acl
setfacl --recursive --modify u:1000:rwx $APPLICATION_ROOT
setfacl --recursive --modify u:1000:rwx $APP_CONTAINER_HOME
setfacl --recursive --modify u:1000:rwx "$APPLICATION_ROOT"
setfacl --recursive --modify u:1000:rwx "$APP_CONTAINER_HOME"
fi

echo "Check services health"
for CONTAINER_ID in $("$COMPOSE_CMD" ps -a -q); do
CONTAINER_NAME=`/usr/bin/docker inspect --format='{{print .Name}}{{if .Config.Image}} ({{print .Config.Image}}){{end}}' $CONTAINER_ID`
HEALTHY=false
TOTAL_COUNT=0
until [ $HEALTHY = true ]; do
if [ "`/usr/bin/docker inspect --format='{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{else}}{{print \"healthy\"}}{{end}}' $CONTAINER_ID`" == "healthy" ]
then
HEALTHY=true
echo "$CONTAINER_NAME is healthy"
else
if [ $TOTAL_COUNT -eq 15 ]
then
echo "$CONTAINER_NAME fails to start"
exit 1
fi
echo "Waiting for $CONTAINER_NAME to be ready..."
sleep 2
TOTAL_COUNT=$[$TOTAL_COUNT +1]
fi
done
done
docker compose up --detach --no-build --no-recreate --wait --wait-timeout 100

# Always wait for 5 seconds, even when all services are considered as healthy,
# as they may respond even if their startup script is still running (should not take more than 5 seconds).
Expand Down
12 changes: 6 additions & 6 deletions .github/actions/init_initialize-imap-fixtures.sh
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#!/bin/bash -e
#!/bin/bash
set -euo pipefail

ROOT_DIR=$(readlink -f "$(dirname $0)/../..")
COMPOSE_CMD="$ROOT_DIR/.github/actions/docker-compose.sh"
ROOT_DIR=$(readlink -f "$(dirname "$0")/../..")

echo "Initialize email fixtures"
"$COMPOSE_CMD" exec -T --user root dovecot doveadm expunge -u testuser mailbox 'INBOX' all
"$COMPOSE_CMD" exec -T --user root dovecot doveadm purge -u testuser
docker compose exec -T --user root dovecot doveadm expunge -u testuser mailbox 'INBOX' all
docker compose exec -T --user root dovecot doveadm purge -u testuser
for f in "$ROOT_DIR"/tests/emails-tests/*.eml; do
cat $f | "$COMPOSE_CMD" exec -T --user testuser dovecot getmail_maildir /home/testuser/Maildir/
docker compose exec -T --user root dovecot doveadm save -u testuser -m INBOX < "$f"
done
17 changes: 8 additions & 9 deletions .github/actions/init_initialize-ldap-fixtures.sh
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
#!/bin/bash -e
#!/bin/bash
set -euo pipefail

ROOT_DIR=$(readlink -f "$(dirname $0)/../..")
COMPOSE_CMD="$ROOT_DIR/.github/actions/docker-compose.sh"
ROOT_DIR=$(readlink -f "$(dirname "$0")/../..")
LDAP_URI=${LDAP_URI:-ldap://openldap:389}
LDAP_BIND_DN=${LDAP_BIND_DN:-cn=admin,dc=glpi,dc=org}
LDAP_BIND_PW=${LDAP_BIND_PW:-insecure}
LDAP_BASE_DN=${LDAP_BASE_DN:-dc=glpi,dc=org}

echo "Initialize LDAP fixtures"
LDAP_CHILD_DNS=$("$COMPOSE_CMD" exec -T openldap ldapsearch -LLL -x -H "$LDAP_URI" -D "$LDAP_BIND_DN" -w "$LDAP_BIND_PW" -b "$LDAP_BASE_DN" -s sub "(objectClass=*)" dn \
| sed -n 's/^dn: //p' \
| grep -vi "^${LDAP_BASE_DN}$" \
| tac || true)
LDAP_CHILD_DNS=$(docker compose exec -T openldap ldapsearch -LLL -x -H "$LDAP_URI" -D "$LDAP_BIND_DN" -w "$LDAP_BIND_PW" -b "$LDAP_BASE_DN" -s sub "(objectClass=*)" dn \
| awk -v base="$LDAP_BASE_DN" '/^dn: / { dn = substr($0, 5); if (tolower(dn) != tolower(base)) print dn; }' \
| tac)

if [ -n "$LDAP_CHILD_DNS" ]; then
echo "$LDAP_CHILD_DNS" | "$COMPOSE_CMD" exec -T openldap ldapdelete -x -H "$LDAP_URI" -D "$LDAP_BIND_DN" -w "$LDAP_BIND_PW" -c
echo "$LDAP_CHILD_DNS" | docker compose exec -T openldap ldapdelete -x -H "$LDAP_URI" -D "$LDAP_BIND_DN" -w "$LDAP_BIND_PW" -c
fi

for f in "$ROOT_DIR"/tests/LDAP/ldif/*.ldif; do
Expand All @@ -37,5 +36,5 @@ for f in "$ROOT_DIR"/tests/LDAP/ldif/*.ldif; do
print $0;
}
}
' "$f" | "$COMPOSE_CMD" exec -T openldap ldapadd -x -H "$LDAP_URI" -D "$LDAP_BIND_DN" -w "$LDAP_BIND_PW" -c
' "$f" | docker compose exec -T openldap ldapadd -x -H "$LDAP_URI" -D "$LDAP_BIND_DN" -w "$LDAP_BIND_PW" -c
done
9 changes: 0 additions & 9 deletions .github/actions/init_initialize-old-dbs.sh

This file was deleted.

24 changes: 4 additions & 20 deletions .github/actions/init_install-dependencies.sh
Original file line number Diff line number Diff line change
@@ -1,22 +1,6 @@
#!/bin/bash -e
#!/bin/bash
set -euo pipefail

PHP_MAJOR_VERSION="$(echo ${PHP_VERSION:-$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')} | cut -d '.' -f 1,2)"
WORKTREE_DIR="$(pwd)"

# The repository is bind-mounted into the container, so Git sees host ownership.
# Mark it as safe before Composer tries to inspect VCS metadata.
git config --global --add safe.directory "$WORKTREE_DIR"

# Validate composer config
composer validate --strict
if ! [[ "$PHP_MAJOR_VERSION" == "8.0" ]] && [[ -f composer.lock ]]; then
composer check-platform-reqs;
elif ! [[ -f composer.lock ]]; then
echo "composer.lock not found, skipping composer check-platform-reqs"
fi

# Install dependencies
if [[ "$PHP_MAJOR_VERSION" == "8.0" ]]; then
COMPOSER_ADD_OPTS=--ignore-platform-reqs;
fi
bin/console dependencies install --composer-options="$COMPOSER_ADD_OPTS --prefer-dist --no-progress"
bin/console dependencies install --composer-options="--prefer-dist --no-progress"
composer check-platform-reqs
Loading
Loading