From d8117803bd3150d48d7c54bcd1fd8fbabf2d6240 Mon Sep 17 00:00:00 2001 From: Ikey Doherty Date: Sat, 3 Feb 2024 12:24:05 +0000 Subject: [PATCH] packaging: Add some very basic triggers info Signed-off-by: Ikey Doherty --- ...-packagesidebar-category-triggers-867.json | 16 ++++ ...ing-recipes-package-definition-md-7b6.json | 4 + ...cs-packaging-triggers-overview-md-774.json | 27 +++++++ ...packaging-triggers-tx-triggers-md-d3a.json | 23 ++++++ .../version-current-metadata-prop-751.json | 35 +++++++++ .../docusaurus-debug-all-content-673.json | 76 +++++++++++++++++++ .docusaurus/globalData.json | 15 ++++ .docusaurus/registry.js | 3 + .docusaurus/routes.js | 24 +++++- .docusaurus/routesChunkNames.json | 18 ++++- docs/packaging/triggers/_category_.json | 9 +++ docs/packaging/triggers/overview.md | 50 ++++++++++++ docs/packaging/triggers/tx_triggers.md | 39 ++++++++++ 13 files changed, 333 insertions(+), 6 deletions(-) create mode 100644 .docusaurus/docusaurus-plugin-content-docs/default/category-docs-packagesidebar-category-triggers-867.json create mode 100644 .docusaurus/docusaurus-plugin-content-docs/default/site-docs-packaging-triggers-overview-md-774.json create mode 100644 .docusaurus/docusaurus-plugin-content-docs/default/site-docs-packaging-triggers-tx-triggers-md-d3a.json create mode 100644 docs/packaging/triggers/_category_.json create mode 100644 docs/packaging/triggers/overview.md create mode 100644 docs/packaging/triggers/tx_triggers.md diff --git a/.docusaurus/docusaurus-plugin-content-docs/default/category-docs-packagesidebar-category-triggers-867.json b/.docusaurus/docusaurus-plugin-content-docs/default/category-docs-packagesidebar-category-triggers-867.json new file mode 100644 index 0000000..eab6d56 --- /dev/null +++ b/.docusaurus/docusaurus-plugin-content-docs/default/category-docs-packagesidebar-category-triggers-867.json @@ -0,0 +1,16 @@ +{ + "title": "Triggers", + "description": "Triggers are system actions run during package installation", + "slug": "/category/triggers", + "permalink": "/docs/category/triggers", + "navigation": { + "previous": { + "title": "Package definitions", + "permalink": "/docs/packaging/recipes/package_definition" + }, + "next": { + "title": "Overview", + "permalink": "/docs/packaging/triggers/overview" + } + } +} \ No newline at end of file diff --git a/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-packaging-recipes-package-definition-md-7b6.json b/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-packaging-recipes-package-definition-md-7b6.json index f4c7a39..d87b949 100644 --- a/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-packaging-recipes-package-definition-md-7b6.json +++ b/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-packaging-recipes-package-definition-md-7b6.json @@ -19,5 +19,9 @@ "previous": { "title": "Build dependencies", "permalink": "/docs/packaging/recipes/build_deps" + }, + "next": { + "title": "Triggers", + "permalink": "/docs/category/triggers" } } \ No newline at end of file diff --git a/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-packaging-triggers-overview-md-774.json b/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-packaging-triggers-overview-md-774.json new file mode 100644 index 0000000..b8d0b98 --- /dev/null +++ b/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-packaging-triggers-overview-md-774.json @@ -0,0 +1,27 @@ +{ + "id": "packaging/triggers/overview", + "title": "Overview", + "description": "Serpent OS supports the use of triggers, or actions, that run at the end of package installations.", + "source": "@site/docs/packaging/triggers/overview.md", + "sourceDirName": "packaging/triggers", + "slug": "/packaging/triggers/overview", + "permalink": "/docs/packaging/triggers/overview", + "draft": false, + "unlisted": false, + "editUrl": "https://github.com/serpent-os/docs/tree/main/docs/packaging/triggers/overview.md", + "tags": [], + "version": "current", + "sidebarPosition": 1, + "frontMatter": { + "sidebar_position": 1 + }, + "sidebar": "packageSidebar", + "previous": { + "title": "Triggers", + "permalink": "/docs/category/triggers" + }, + "next": { + "title": "Transaction Triggers", + "permalink": "/docs/packaging/triggers/tx_triggers" + } +} \ No newline at end of file diff --git a/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-packaging-triggers-tx-triggers-md-d3a.json b/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-packaging-triggers-tx-triggers-md-d3a.json new file mode 100644 index 0000000..f1e818b --- /dev/null +++ b/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-packaging-triggers-tx-triggers-md-d3a.json @@ -0,0 +1,23 @@ +{ + "id": "packaging/triggers/tx_triggers", + "title": "Transaction Triggers", + "description": "Transactional scope triggers (tx triggers) are run after the new filesystem transaction has been", + "source": "@site/docs/packaging/triggers/tx_triggers.md", + "sourceDirName": "packaging/triggers", + "slug": "/packaging/triggers/tx_triggers", + "permalink": "/docs/packaging/triggers/tx_triggers", + "draft": false, + "unlisted": false, + "editUrl": "https://github.com/serpent-os/docs/tree/main/docs/packaging/triggers/tx_triggers.md", + "tags": [], + "version": "current", + "sidebarPosition": 2, + "frontMatter": { + "sidebar_position": 2 + }, + "sidebar": "packageSidebar", + "previous": { + "title": "Overview", + "permalink": "/docs/packaging/triggers/overview" + } +} \ No newline at end of file diff --git a/.docusaurus/docusaurus-plugin-content-docs/default/version-current-metadata-prop-751.json b/.docusaurus/docusaurus-plugin-content-docs/default/version-current-metadata-prop-751.json index 8f34ec4..eed4119 100644 --- a/.docusaurus/docusaurus-plugin-content-docs/default/version-current-metadata-prop-751.json +++ b/.docusaurus/docusaurus-plugin-content-docs/default/version-current-metadata-prop-751.json @@ -114,6 +114,29 @@ } ], "href": "/docs/category/recipes" + }, + { + "type": "category", + "label": "Triggers", + "collapsible": true, + "collapsed": true, + "items": [ + { + "type": "link", + "label": "Overview", + "href": "/docs/packaging/triggers/overview", + "docId": "packaging/triggers/overview", + "unlisted": false + }, + { + "type": "link", + "label": "Transaction Triggers", + "href": "/docs/packaging/triggers/tx_triggers", + "docId": "packaging/triggers/tx_triggers", + "unlisted": false + } + ], + "href": "/docs/category/triggers" } ], "userSidebar": [ @@ -198,6 +221,18 @@ "description": "The majority of packages are built using upstream release sources. While it is possible to create packages manually from local assets, the bulk of packages take an upstream tarball and build it.", "sidebar": "packageSidebar" }, + "packaging/triggers/overview": { + "id": "packaging/triggers/overview", + "title": "Overview", + "description": "Serpent OS supports the use of triggers, or actions, that run at the end of package installations.", + "sidebar": "packageSidebar" + }, + "packaging/triggers/tx_triggers": { + "id": "packaging/triggers/tx_triggers", + "title": "Transaction Triggers", + "description": "Transactional scope triggers (tx triggers) are run after the new filesystem transaction has been", + "sidebar": "packageSidebar" + }, "users/intro": { "id": "users/intro", "title": "Introduction", diff --git a/.docusaurus/docusaurus-plugin-debug/default/docusaurus-debug-all-content-673.json b/.docusaurus/docusaurus-plugin-debug/default/docusaurus-debug-all-content-673.json index 6ec7a57..3b70a99 100644 --- a/.docusaurus/docusaurus-plugin-debug/default/docusaurus-debug-all-content-673.json +++ b/.docusaurus/docusaurus-plugin-debug/default/docusaurus-debug-all-content-673.json @@ -286,6 +286,10 @@ "previous": { "title": "Build dependencies", "permalink": "/docs/packaging/recipes/build_deps" + }, + "next": { + "title": "Triggers", + "permalink": "/docs/category/triggers" } }, { @@ -315,6 +319,56 @@ "permalink": "/docs/packaging/recipes/metadata" } }, + { + "id": "packaging/triggers/overview", + "title": "Overview", + "description": "Serpent OS supports the use of triggers, or actions, that run at the end of package installations.", + "source": "@site/docs/packaging/triggers/overview.md", + "sourceDirName": "packaging/triggers", + "slug": "/packaging/triggers/overview", + "permalink": "/docs/packaging/triggers/overview", + "draft": false, + "unlisted": false, + "editUrl": "https://github.com/serpent-os/docs/tree/main/docs/packaging/triggers/overview.md", + "tags": [], + "version": "current", + "sidebarPosition": 1, + "frontMatter": { + "sidebar_position": 1 + }, + "sidebar": "packageSidebar", + "previous": { + "title": "Triggers", + "permalink": "/docs/category/triggers" + }, + "next": { + "title": "Transaction Triggers", + "permalink": "/docs/packaging/triggers/tx_triggers" + } + }, + { + "id": "packaging/triggers/tx_triggers", + "title": "Transaction Triggers", + "description": "Transactional scope triggers (tx triggers) are run after the new filesystem transaction has been", + "source": "@site/docs/packaging/triggers/tx_triggers.md", + "sourceDirName": "packaging/triggers", + "slug": "/packaging/triggers/tx_triggers", + "permalink": "/docs/packaging/triggers/tx_triggers", + "draft": false, + "unlisted": false, + "editUrl": "https://github.com/serpent-os/docs/tree/main/docs/packaging/triggers/tx_triggers.md", + "tags": [], + "version": "current", + "sidebarPosition": 2, + "frontMatter": { + "sidebar_position": 2 + }, + "sidebar": "packageSidebar", + "previous": { + "title": "Overview", + "permalink": "/docs/packaging/triggers/overview" + } + }, { "id": "users/intro", "title": "Introduction", @@ -422,6 +476,28 @@ "slug": "/category/recipes", "permalink": "/docs/category/recipes" } + }, + { + "type": "category", + "label": "Triggers", + "collapsible": true, + "collapsed": true, + "items": [ + { + "type": "doc", + "id": "packaging/triggers/overview" + }, + { + "type": "doc", + "id": "packaging/triggers/tx_triggers" + } + ], + "link": { + "type": "generated-index", + "description": "Triggers are system actions run during package installation", + "slug": "/category/triggers", + "permalink": "/docs/category/triggers" + } } ], "userSidebar": [ diff --git a/.docusaurus/globalData.json b/.docusaurus/globalData.json index f9d0ae7..b7e8f14 100644 --- a/.docusaurus/globalData.json +++ b/.docusaurus/globalData.json @@ -69,6 +69,16 @@ "path": "/docs/packaging/recipes/upstreams", "sidebar": "packageSidebar" }, + { + "id": "packaging/triggers/overview", + "path": "/docs/packaging/triggers/overview", + "sidebar": "packageSidebar" + }, + { + "id": "packaging/triggers/tx_triggers", + "path": "/docs/packaging/triggers/tx_triggers", + "sidebar": "packageSidebar" + }, { "id": "users/intro", "path": "/docs/users/intro", @@ -88,6 +98,11 @@ "id": "/category/recipes", "path": "/docs/category/recipes", "sidebar": "packageSidebar" + }, + { + "id": "/category/triggers", + "path": "/docs/category/triggers", + "sidebar": "packageSidebar" } ], "draftIds": [], diff --git a/.docusaurus/registry.js b/.docusaurus/registry.js index 37f3bbe..46d41d4 100644 --- a/.docusaurus/registry.js +++ b/.docusaurus/registry.js @@ -14,6 +14,7 @@ export default { "allContent---docusaurus-debug-content-246-9aa": [() => import(/* webpackChunkName: "allContent---docusaurus-debug-content-246-9aa" */ "~debug/default/docusaurus-debug-all-content-673.json"), "~debug/default/docusaurus-debug-all-content-673.json", require.resolveWeak("~debug/default/docusaurus-debug-all-content-673.json")], "categoryGeneratedIndex---docs-category-recipescb-0-301": [() => import(/* webpackChunkName: "categoryGeneratedIndex---docs-category-recipescb-0-301" */ "~docs/default/category-docs-packagesidebar-category-recipes-826.json"), "~docs/default/category-docs-packagesidebar-category-recipes-826.json", require.resolveWeak("~docs/default/category-docs-packagesidebar-category-recipes-826.json")], "categoryGeneratedIndex---docs-category-stone-format-6-fd-66f": [() => import(/* webpackChunkName: "categoryGeneratedIndex---docs-category-stone-format-6-fd-66f" */ "~docs/default/category-docs-devsidebar-category-stone-format-b15.json"), "~docs/default/category-docs-devsidebar-category-stone-format-b15.json", require.resolveWeak("~docs/default/category-docs-devsidebar-category-stone-format-b15.json")], + "categoryGeneratedIndex---docs-category-triggers-0-e-5-f10": [() => import(/* webpackChunkName: "categoryGeneratedIndex---docs-category-triggers-0-e-5-f10" */ "~docs/default/category-docs-packagesidebar-category-triggers-867.json"), "~docs/default/category-docs-packagesidebar-category-triggers-867.json", require.resolveWeak("~docs/default/category-docs-packagesidebar-category-triggers-867.json")], "categoryGeneratedIndex---docs-category-v-195-b-d8f": [() => import(/* webpackChunkName: "categoryGeneratedIndex---docs-category-v-195-b-d8f" */ "~docs/default/category-docs-devsidebar-category-v-1-1cc.json"), "~docs/default/category-docs-devsidebar-category-v-1-1cc.json", require.resolveWeak("~docs/default/category-docs-devsidebar-category-v-1-1cc.json")], "config---5-e-9-4f3": [() => import(/* webpackChunkName: "config---5-e-9-4f3" */ "@generated/docusaurus.config"), "@generated/docusaurus.config", require.resolveWeak("@generated/docusaurus.config")], "content---docs-developers-intro-3-d-1-930": [() => import(/* webpackChunkName: "content---docs-developers-intro-3-d-1-930" */ "@site/docs/developers/intro.md"), "@site/docs/developers/intro.md", require.resolveWeak("@site/docs/developers/intro.md")], @@ -28,6 +29,8 @@ export default { "content---docs-packaging-recipes-overview-344-1e0": [() => import(/* webpackChunkName: "content---docs-packaging-recipes-overview-344-1e0" */ "@site/docs/packaging/recipes/overview.md"), "@site/docs/packaging/recipes/overview.md", require.resolveWeak("@site/docs/packaging/recipes/overview.md")], "content---docs-packaging-recipes-package-definition-7-b-6-107": [() => import(/* webpackChunkName: "content---docs-packaging-recipes-package-definition-7-b-6-107" */ "@site/docs/packaging/recipes/package_definition.md"), "@site/docs/packaging/recipes/package_definition.md", require.resolveWeak("@site/docs/packaging/recipes/package_definition.md")], "content---docs-packaging-recipes-upstreamsb-7-a-a37": [() => import(/* webpackChunkName: "content---docs-packaging-recipes-upstreamsb-7-a-a37" */ "@site/docs/packaging/recipes/upstreams.md"), "@site/docs/packaging/recipes/upstreams.md", require.resolveWeak("@site/docs/packaging/recipes/upstreams.md")], + "content---docs-packaging-triggers-overview-774-c35": [() => import(/* webpackChunkName: "content---docs-packaging-triggers-overview-774-c35" */ "@site/docs/packaging/triggers/overview.md"), "@site/docs/packaging/triggers/overview.md", require.resolveWeak("@site/docs/packaging/triggers/overview.md")], + "content---docs-packaging-triggers-tx-triggersd-3-a-25d": [() => import(/* webpackChunkName: "content---docs-packaging-triggers-tx-triggersd-3-a-25d" */ "@site/docs/packaging/triggers/tx_triggers.md"), "@site/docs/packaging/triggers/tx_triggers.md", require.resolveWeak("@site/docs/packaging/triggers/tx_triggers.md")], "content---docs-users-intro-7-c-6-878": [() => import(/* webpackChunkName: "content---docs-users-intro-7-c-6-878" */ "@site/docs/users/intro.md"), "@site/docs/users/intro.md", require.resolveWeak("@site/docs/users/intro.md")], "plugin---4-c-9-786": [() => import(/* webpackChunkName: "plugin---4-c-9-786" */ "/home/ikey/serpent/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json"), "/home/ikey/serpent/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json", require.resolveWeak("/home/ikey/serpent/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json")], "plugin---docs-13-c-7c1": [() => import(/* webpackChunkName: "plugin---docs-13-c-7c1" */ "/home/ikey/serpent/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json"), "/home/ikey/serpent/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json", require.resolveWeak("/home/ikey/serpent/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json")], diff --git a/.docusaurus/routes.js b/.docusaurus/routes.js index 6ba2b46..010905d 100644 --- a/.docusaurus/routes.js +++ b/.docusaurus/routes.js @@ -39,15 +39,15 @@ export default [ }, { path: '/docs', - component: ComponentCreator('/docs', '01c'), + component: ComponentCreator('/docs', 'a02'), routes: [ { path: '/docs', - component: ComponentCreator('/docs', '19d'), + component: ComponentCreator('/docs', '834'), routes: [ { path: '/docs', - component: ComponentCreator('/docs', '01f'), + component: ComponentCreator('/docs', '687'), routes: [ { path: '/docs/category/recipes', @@ -61,6 +61,12 @@ export default [ exact: true, sidebar: "devSidebar" }, + { + path: '/docs/category/triggers', + component: ComponentCreator('/docs/category/triggers', '1a1'), + exact: true, + sidebar: "packageSidebar" + }, { path: '/docs/category/v1', component: ComponentCreator('/docs/category/v1', '6d4'), @@ -138,6 +144,18 @@ export default [ exact: true, sidebar: "packageSidebar" }, + { + path: '/docs/packaging/triggers/overview', + component: ComponentCreator('/docs/packaging/triggers/overview', '78e'), + exact: true, + sidebar: "packageSidebar" + }, + { + path: '/docs/packaging/triggers/tx_triggers', + component: ComponentCreator('/docs/packaging/triggers/tx_triggers', '64b'), + exact: true, + sidebar: "packageSidebar" + }, { path: '/docs/users/intro', component: ComponentCreator('/docs/users/intro', '420'), diff --git a/.docusaurus/routesChunkNames.json b/.docusaurus/routesChunkNames.json index 8635f1e..29362c9 100644 --- a/.docusaurus/routesChunkNames.json +++ b/.docusaurus/routesChunkNames.json @@ -42,17 +42,17 @@ "plugin": "plugin---docusaurus-debug-8-ae-ccb" } }, - "/docs-01c": { + "/docs-a02": { "__comp": "__comp---theme-docs-root-5-e-9-0b6", "__context": { "plugin": "plugin---docs-13-c-7c1" } }, - "/docs-19d": { + "/docs-834": { "__comp": "__comp---theme-doc-version-roota-7-b-5de", "version": "version---docs-935-398" }, - "/docs-01f": { + "/docs-687": { "__comp": "__comp---theme-doc-roota-94-67a" }, "/docs/category/recipes-b62": { @@ -63,6 +63,10 @@ "__comp": "__comp---theme-doc-category-generated-index-page-14-e-640", "categoryGeneratedIndex": "categoryGeneratedIndex---docs-category-stone-format-6-fd-66f" }, + "/docs/category/triggers-1a1": { + "__comp": "__comp---theme-doc-category-generated-index-page-14-e-640", + "categoryGeneratedIndex": "categoryGeneratedIndex---docs-category-triggers-0-e-5-f10" + }, "/docs/category/v1-6d4": { "__comp": "__comp---theme-doc-category-generated-index-page-14-e-640", "categoryGeneratedIndex": "categoryGeneratedIndex---docs-category-v-195-b-d8f" @@ -115,6 +119,14 @@ "__comp": "__comp---theme-doc-item-178-a40", "content": "content---docs-packaging-recipes-upstreamsb-7-a-a37" }, + "/docs/packaging/triggers/overview-78e": { + "__comp": "__comp---theme-doc-item-178-a40", + "content": "content---docs-packaging-triggers-overview-774-c35" + }, + "/docs/packaging/triggers/tx_triggers-64b": { + "__comp": "__comp---theme-doc-item-178-a40", + "content": "content---docs-packaging-triggers-tx-triggersd-3-a-25d" + }, "/docs/users/intro-420": { "__comp": "__comp---theme-doc-item-178-a40", "content": "content---docs-users-intro-7-c-6-878" diff --git a/docs/packaging/triggers/_category_.json b/docs/packaging/triggers/_category_.json new file mode 100644 index 0000000..baca2e0 --- /dev/null +++ b/docs/packaging/triggers/_category_.json @@ -0,0 +1,9 @@ +{ + "label": "Triggers", + "position": 3, + "link": { + "type": "generated-index", + "description": "Triggers are system actions run during package installation" + } + } + \ No newline at end of file diff --git a/docs/packaging/triggers/overview.md b/docs/packaging/triggers/overview.md new file mode 100644 index 0000000..6435e4f --- /dev/null +++ b/docs/packaging/triggers/overview.md @@ -0,0 +1,50 @@ +--- +sidebar_position: 1 +--- + +# Overview + +Serpent OS supports the use of triggers, or actions, that run at the end of package installations. +Given the significantly different architecture of Serpent OS, these triggers may not be quite what +you are used to in other distributions or package managers. + +## Basic mechanism + +After a new transaction is formed and `moss` has identified all of the paths used to compose a filesystem, +the staging tree is built as the basis of the new `/usr`. Any trigger files (under `/usr/share/moss/triggers`) +will be loaded, and any **matching** triggers will be executed at the appropriate stage. + +Note that trigger logic is based on `glob`-style path matches and are not incremental. Our triggers were so +designed to avoid the uncontrolled execution of arbitrary scripts, instead relying on logical matching of +patterns to handlers. + +## Capturing globs + +Our triggers use special string tokens to permit capturing groups from a glob-style string. At this stage we +support `*` and `?` glob characters only, compiling to a regex internally. Support is planned for braces. + +``` + /usr/lib/(GROUP_NAME:PATTERN)/dir +``` + +The parenthesis begin a non-greedy capture group named `GROUP_NAME` containing pattern `PATTERN`. For example: + +``` + /usr/share/icons/(name:*)/index.theme +``` + +This creates a capture group identifed by `name` matching `*` in `/usr/share/icons/*/index.theme`. As such, +the path `/usr/share/icons/hicolor/index.theme`. with `name` being set to `hicolor`. + +This is a powerful mechanism that allows us to control handler execution without relying on interim scripts. + +Consider this example: + +``` + /usr/lib*/(libname:lib*.so.*) +``` + +This will only match `lib*.so.*` glob, and set `libname` to `libz.so.1` for `/usr/lib32/libz.so.1`, but will not +match for `/usr/lib64/libz.so`. + +These globs are then used for string substitution in the arguments passed to handlers. \ No newline at end of file diff --git a/docs/packaging/triggers/tx_triggers.md b/docs/packaging/triggers/tx_triggers.md new file mode 100644 index 0000000..2c2d353 --- /dev/null +++ b/docs/packaging/triggers/tx_triggers.md @@ -0,0 +1,39 @@ +--- +sidebar_position: 2 +--- + +# Transaction Triggers + +Transactional scope triggers (`tx triggers`) are run after the new filesystem transaction has been +blitted to disk, and just before the new `/usr` tree is activated. These triggers run within a specialised +container and have read-write access to the new `/usr` tree, but only have read-only access to the `/etc` +directory. + +Currently transaction triggers must be installed in `/usr/share/moss/triggers/pre.d` with a `.yaml` suffix. +In a future update to moss this path will be changed to `/usr/share/moss/triggers/tx.d` + +## Sample trigger + +This simple trigger will run `depmod -a 6.6.15` when any files are installed to `/usr/lib/modules/6.6.15/`. +Note that identical commands (after expansion) will be collapsed automatically to a single run. + +```yaml +name: depmod +description: | + Update kernel module dependencies + +# Define all of our handlers +handlers: + depmod: + # Run `depmod` with these arguments + run: /usr/sbin/depmod + args: ["-a", "$(version)"] + +paths: + # Set up a match + "/usr/lib/modules/(version:*)/*" : + # Run these handlers for this match. + handlers: + - depmod + type: directory +``` \ No newline at end of file