{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":311671251,"defaultBranch":"master","name":"pebble","ownerLogin":"canonical","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2020-11-10T13:44:30.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/53057619?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1724894108.0","currentOid":""},"activityList":{"items":[{"before":"9d7e74ef50cfd34c1cd7b951830b18cd7cf38816","after":"999e48ba7b8f752bc61c310b53061e717509e367","ref":"refs/heads/master","pushedAt":"2024-09-25T22:02:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tonyandrewmeyer","name":"Tony Meyer","path":"/tonyandrewmeyer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/826522?s=80&v=4"},"commit":{"message":"docs: add a security policy document (#504)\n\nDocument the security policy for the Pebble project.\r\n\r\nSee also\r\n[SEC0026](https://docs.google.com/document/d/1RolsiWCWhM-sVmHFjLt-Mq5yKcgQJ8GLXssGJREjSL0/edit).","shortMessageHtmlLink":"docs: add a security policy document (#504)"}},{"before":"0ca17afa32642d9bd8678ff870fe0bc531ba0c89","after":"9d7e74ef50cfd34c1cd7b951830b18cd7cf38816","ref":"refs/heads/master","pushedAt":"2024-09-25T20:23:30.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tonyandrewmeyer","name":"Tony Meyer","path":"/tonyandrewmeyer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/826522?s=80&v=4"},"commit":{"message":"chore: bump the snapcore/action-build action version (#505)\n\nIt [seems like there's only\r\n1.3.0](https://github.com/snapcore/action-build/tags) available now,\r\nalthough I'm not sure what the story is behind that. This blocks other\r\nPRs from merging.\r\n\r\nIn any case, it seems reasonable to bump this to the latest available\r\n1.x version. I couldn't find a changelog or release notes, but the\r\ncommits seem straightforward and unlikely to cause issues, and it is a\r\nCanonical project.","shortMessageHtmlLink":"chore: bump the snapcore/action-build action version (#505)"}},{"before":"3fce9ec0fc773abbff3bba9818a15bb237bbfb7d","after":"0ca17afa32642d9bd8678ff870fe0bc531ba0c89","ref":"refs/heads/master","pushedAt":"2024-09-23T07:18:01.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"test: add integration tests for \"pebble run\" (#497)\n\nAdd integration tests for `pebble run`.","shortMessageHtmlLink":"test: add integration tests for \"pebble run\" (#497)"}},{"before":"183eadfbbb342daf4ea30186e76bfd3e18f07fa8","after":"3fce9ec0fc773abbff3bba9818a15bb237bbfb7d","ref":"refs/heads/master","pushedAt":"2024-09-23T04:59:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"test: make root tests easier to run (#501)\n\nBackground: Previously, when adding a new root test, we had to modify\r\nthe GitHub Actions workflow to include the newly added test, which is\r\nsome extra operational overhead.\r\n\r\nPer discussion\r\n[here](https://github.com/canonical/pebble/pull/500#issuecomment-2362290802),\r\nwe agreed to run all tests with root and skip those tests that would\r\nfail with root (checking permissions and stuff), and this PR skips tests\r\nthat would fail when running with root and made the GitHub Actions\r\nworkflow for root tests much easier.","shortMessageHtmlLink":"test: make root tests easier to run (#501)"}},{"before":"9b7661a2a4e7eccf30ac243ca1d27ad580427340","after":"183eadfbbb342daf4ea30186e76bfd3e18f07fa8","ref":"refs/heads/master","pushedAt":"2024-08-30T07:02:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"flotter","name":"Frederik Lotter","path":"/flotter","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6926683?s=80&v=4"},"commit":{"message":"feat(planstate): add plan section support (#489)\n\nBuilt on top of https://github.com/canonical/pebble/pull/488.\r\n\r\nAdd section support to the Plan Manager (planstate).","shortMessageHtmlLink":"feat(planstate): add plan section support (#489)"}},{"before":"4e0e251373f27e81484ceb25ca16f1e427f291b2","after":"9b7661a2a4e7eccf30ac243ca1d27ad580427340","ref":"refs/heads/master","pushedAt":"2024-08-30T06:54:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"flotter","name":"Frederik Lotter","path":"/flotter","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6926683?s=80&v=4"},"commit":{"message":"feat(plan): add plan section support (#488)\n\nThe plan library was originally written as a configuration schema for\r\nthe services manager (servstate). Over time the need arose to support\r\nconfigurations for other managers such as checks (checkstate) and\r\nlog-targets (logstate). The configuration schema for these managers,\r\nclosely related to the services manager, has since also been built in to\r\nthe plan library.\r\n\r\nThe services manager and its related checks and log-targets\r\nfunctionality will always be part of the Pebble core. However, as Pebble\r\nis getting more functionality (additional managers) and also used as a\r\ncore in derivative projects, a more modular and dynamic approach to\r\nextending the schema is needed.\r\n\r\nAdd an the ```SectionExtension``` interface for use by managers who\r\nwishes to register a schema extension during Pebble startup.\r\n\r\nInside each layer, top level entries are now referred to as\r\n```sections``` (built-in sections includes ```summary```,\r\n```description```, ```services```, ```log-targets``` and ```checks```).\r\n\r\nEach section has an associated ```field``` that is the top level key,\r\nand if supplied by an extension, an opaque backing type ```Section```.\r\n\r\n**SectionExtension interface:**\r\n\r\n```\r\n// SectionExtension allows the plan layer schema to be extended without\r\n// adding centralised schema knowledge to the plan library.\r\ntype SectionExtension interface {\r\n\t// ParseSection returns a newly allocated concrete type containing the\r\n\t// unmarshalled section content.\r\n\tParseSection(data yaml.Node) (LayerSection, error)\r\n\r\n\t// CombineSections returns a newly allocated concrete type containing the\r\n\t// result of combining the supplied sections in order.\r\n\tCombineSections(sections ...LayerSection) (LayerSection, error)\r\n\r\n\t// ValidatePlan takes the complete plan as input, and allows the\r\n\t// extension to validate the plan. This can be used for cross section\r\n\t// dependency validation.\r\n\tValidatePlan(plan *Plan) error\r\n}\r\n\r\ntype Section interface {\r\n\t// Validate checks whether the section is valid, returning an error if not.\r\n\tValidate() error\r\n\t\r\n // IsZero reports whether the section is empty.\r\n\tIsZero() bool\r\n}\r\n```\r\n\r\n**Example usage:**\r\n\r\n```\r\n// New SectionExtension type\r\ntype fooExtension struct{}\r\nfunc (f *fooExtension) ParseSection(data yaml.Node) (LayerSection, error) {...}\r\nfunc (f *fooExtension) CombineSections(sections ...LayerSection) (LayerSection, error) {...}\r\nfunc (f *fooExtension) ValidatePlan(plan *Plan) error {...}\r\n\r\n// New Section type\r\ntype FooSection struct {\r\n Entries map[string]Bar `yaml:\",inline,omitempty\"`\r\n}\r\ntype Bar struct {\r\n Name string `yaml:\"name,omitempty\"`\r\n}\r\nfunc (s *FooSection) Validate() error {...}\r\nfunc (s *FooSection) IsZero() bool {...}\r\n```\r\n```\r\n// Early startup\r\nplan.RegisterExtension(\"foo\", &fooExtension{})\r\n:\r\n// Load layers containing new section\r\nnewPlan := plan.ReadDir(layersDir)\r\n:\r\n// Show plan\r\nyaml.Marshal(newPlan)\r\n```\r\nExample YAML output:\r\n```\r\nfoo:\r\n bar1:\r\n name: test1\r\n bar2:\r\n name: test2 \r\n```","shortMessageHtmlLink":"feat(plan): add plan section support (#488)"}},{"before":"d0e7c7e695dbb1e1cfcb75b529be5bbcffe8ea2d","after":"4e0e251373f27e81484ceb25ca16f1e427f291b2","ref":"refs/heads/master","pushedAt":"2024-08-29T02:34:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"benhoyt","name":"Ben Hoyt","path":"/benhoyt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/999033?s=80&v=4"},"commit":{"message":"chore: bump version to v1.17.0-dev for development","shortMessageHtmlLink":"chore: bump version to v1.17.0-dev for development"}},{"before":"5cf80bedaa6d09ea1e872626bdcc3c693e7ded4a","after":"d0e7c7e695dbb1e1cfcb75b529be5bbcffe8ea2d","ref":"refs/heads/master","pushedAt":"2024-08-29T00:57:35.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"benhoyt","name":"Ben Hoyt","path":"/benhoyt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/999033?s=80&v=4"},"commit":{"message":"chore: bump version to v1.16.0 for release","shortMessageHtmlLink":"chore: bump version to v1.16.0 for release"}},{"before":"6b7d6b5830581db2d9db231061c5cc86f228d4e9","after":"5cf80bedaa6d09ea1e872626bdcc3c693e7ded4a","ref":"refs/heads/master","pushedAt":"2024-08-29T00:55:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"benhoyt","name":"Ben Hoyt","path":"/benhoyt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/999033?s=80&v=4"},"commit":{"message":"refactor(state): avoid need for state lock in LatestWarningTime (#493)\n\nThis means that not every request/response needs to acquire the state\r\nlock, as shown by the removal of the custom response type in the\r\n/v1/health endpoint.\r\n\r\nNote that there's a test, TestHealthStateLockNotHeldSuccess, that\r\nspecifically tests that the state lock is not held during /v1/health\r\nrequests. If we accidentally introduce locking again, that will fail.\r\n\r\nFixes #366.","shortMessageHtmlLink":"refactor(state): avoid need for state lock in LatestWarningTime (#493)"}},{"before":"5c8a9abac64f96182e0ff70f71b7801440e7abdb","after":"6b7d6b5830581db2d9db231061c5cc86f228d4e9","ref":"refs/heads/master","pushedAt":"2024-08-28T02:13:35.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tonyandrewmeyer","name":"Tony Meyer","path":"/tonyandrewmeyer","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/826522?s=80&v=4"},"commit":{"message":"ci: add a monthly (or on demand) TIOBE reporting workflow (#494)\n\nOnce a month, send the latest code quality (including coverage) data to\r\nTIOBE for central storage.\r\n\r\n---------\r\n\r\nCo-authored-by: Ben Hoyt ","shortMessageHtmlLink":"ci: add a monthly (or on demand) TIOBE reporting workflow (#494)"}},{"before":"9c9e95a020ead1662712ea7ea63ece0920f9596f","after":"5c8a9abac64f96182e0ff70f71b7801440e7abdb","ref":"refs/heads/master","pushedAt":"2024-08-26T21:09:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"benhoyt","name":"Ben Hoyt","path":"/benhoyt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/999033?s=80&v=4"},"commit":{"message":"test: improve osutil.mkdir test coverage (#492)\n\nAdded two more test cases to improve test coverage.\r\n\r\nIf the path already exists but it's not a directory, a `syscall.ENOTDIR`\r\nerror is expected.","shortMessageHtmlLink":"test: improve osutil.mkdir test coverage (#492)"}},{"before":"0dd6abc626f6cabd840a577bc1d1ecbb7f5a5af0","after":"9c9e95a020ead1662712ea7ea63ece0920f9596f","ref":"refs/heads/master","pushedAt":"2024-08-21T22:15:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"benhoyt","name":"Ben Hoyt","path":"/benhoyt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/999033?s=80&v=4"},"commit":{"message":"fix: initialize socketPath to prevent stale cache (#491)\n\n`daemonSuite.socketPath` appears to be assigned outside of the test, but\r\nonly when it has a default value, which results in a stale `socketPath`\r\nvalue in this test.\r\n\r\nRunning `go test -count=2 -v ./internals/daemon -check.v` with this fix\r\nnow passes.\r\n\r\nFixes #282.","shortMessageHtmlLink":"fix: initialize socketPath to prevent stale cache (#491)"}},{"before":"b0d5e05b73c05136c1c44c41e2f9e94bc4a011c0","after":"0dd6abc626f6cabd840a577bc1d1ecbb7f5a5af0","ref":"refs/heads/master","pushedAt":"2024-08-20T05:09:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"benhoyt","name":"Ben Hoyt","path":"/benhoyt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/999033?s=80&v=4"},"commit":{"message":"refactor: implement warnings as notices (#486)\n\nThis deletes the legacy warnings code and re-implements `pebble\r\nwarnings` and `pebble okay` using notices as warnings (as we originally\r\nintended). The `/v1/warnings` endpoints have been removed, and `pebble\r\nwarnings` now hits `/v1/notices?types=warning`.\r\n\r\nOn every request, instead of returning the count of warnings and the\r\nlatest timestamp, we only return the timestamp of the latest (most\r\nrecent last-repeated time). This way the server doesn't have to track\r\nwhich notices have been okayed -- the client can compare against its\r\nstored timestamp and see if the server-reported timestamp is later.\r\n\r\nSo there are a few breaking changes in this PR:\r\n\r\n* `Client.WarningsSummary() (count int, timestamp time.Time)` is now\r\n`Client.LatestWarningTime() time.Time`, as there's no count anymore\r\n* `GET /v1/warnings` (list warnings) is gone: `pebble warnings` now uses\r\n`GET /v1/notices?types=warning`\r\n* `POST /v1/warnings` (okay warnings) are gone: `pebble okay` now just\r\nupdates the local state file, and doesn't use the API/client at all\r\n* Similarly, `Client.Warnings()` and `Client.Okay()` are gone; use\r\n`Client.Notices()` and maintain local client-side state, respectively\r\n* `State.Warnf` is still around, but it's now just a helper that calls\r\n`State.AddNotice` with the right type (warning) and key (message)\r\n\r\nFixes #475.","shortMessageHtmlLink":"refactor: implement warnings as notices (#486)"}},{"before":"069cb81f37be7c4d710dfc84308d917e8484482b","after":"b0d5e05b73c05136c1c44c41e2f9e94bc4a011c0","ref":"refs/heads/master","pushedAt":"2024-08-19T21:56:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"flotter","name":"Frederik Lotter","path":"/flotter","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6926683?s=80&v=4"},"commit":{"message":"fix(overlord): allow ensure when state is available (#482)\n\nManagers can explicitly call ```state.EnsureBefore()``` if they wish to\r\napply changes sooner than the scheduled 5min ensure overlord timer.\r\n\r\nAlthough managers get a state instance at creation time, during\r\n```overlord.New()```, it is currently forbidden to call ensure early on\r\nbefore the ```Daemon``` started the ```overlord.Loop()```. The current\r\nrestriction stems from the fact that ```state.EnsureBefore()``` adjusts\r\nthe ensure timer expiry time, and the timer is only created when\r\n```overlord.Loop()``` is called.\r\n\r\n**The problem:**\r\n\r\nSince the overlord ensure loop is only started later on during\r\n```daemon.Start()```, a manager has no direct way to know when it's safe\r\nto call Ensure. Managers currently have to use the first call to their\r\n```Ensure()``` method as an indication the overlord loop was entered,\r\nwhich is unnecessary manager boilerplate code. See\r\n```overlord/checkstate/manager.go```.\r\n\r\nManagers (and managers with dependencies on other managers), may want to\r\nimplement state changes during callbacks. These events can come from\r\noutside the overlord framework (e.g. from the Linux kernel or early on\r\nduring manager ```StartUp```), meaning that handlers using state may be\r\ntriggered asynchronously from the Daemon startup sequence, and arrive\r\nbefore the overlord Loop is started.\r\n\r\n**Solution:**\r\n\r\nAllow ```state.EnsureBefore()``` to be called before the timer exists.\r\nSince an implicit ensure is performed on overlord loop entry, simply\r\nreturning while the timer does not exist is the same as saying an ensure\r\nis already scheduled.","shortMessageHtmlLink":"fix(overlord): allow ensure when state is available (#482)"}},{"before":"ca88b8dc33dc8a90f29882012077ac9161732e37","after":"069cb81f37be7c4d710dfc84308d917e8484482b","ref":"refs/heads/master","pushedAt":"2024-08-19T02:32:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"docs: update in this documentation section (#485)\n\nUpdate the \"In this documentation\" section on the main page.","shortMessageHtmlLink":"docs: update in this documentation section (#485)"}},{"before":"67b4cf279f8379634cba4a369f69fee33699cc37","after":"ca88b8dc33dc8a90f29882012077ac9161732e37","ref":"refs/heads/master","pushedAt":"2024-08-16T04:15:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"benhoyt","name":"Ben Hoyt","path":"/benhoyt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/999033?s=80&v=4"},"commit":{"message":"fix(logger): Make MockLogger threadsafe (#441)\n\nWhen using a `logger.MockLogger()`, a background goroutine calling\r\n`logger.Noticef()` might race the underlying `bytes.Buffer` for\r\nread/write access. To avoid that, limit the returned buffer type for\r\n`MockLogger()` to just `fmt.Stringer` (and mutex-protect its reading\r\nfrom the buffer) as well as mutex-protect `Write()` calls to the\r\nunderlying buffer.\r\n\r\nTo reproduce the race condition, run `go test -race ./internals/logger`\r\nwith `TestMockLoggerReadWriteThreadsafe` added, but with the unmodified\r\n`MockLogger` implementation.\r\n\r\nIf more functions from `bytes.Buffer` are needed from the `MockLogger`\r\nreturn value, the interface can be expanded with additional pass-through\r\nlock-protected calls, but in all of Pebble, it seems only the\r\n`.String()` function is used, so only that is exposed for now.\r\n\r\nWhile `logger.Noticef()` calls are serialized by `logger.loggerLock`,\r\nthe same cannot be said for parallel access to the underlying\r\n`bytes.Buffer` that is returned from `MockLogger` when calling\r\n`logger.Noticef()` in one goroutine, and accessing the `bytes.Buffer`\r\nfrom another goroutine.","shortMessageHtmlLink":"fix(logger): Make MockLogger threadsafe (#441)"}},{"before":"6b170f529066d6598bc5cbd5c5693fde526144f5","after":"67b4cf279f8379634cba4a369f69fee33699cc37","ref":"refs/heads/master","pushedAt":"2024-08-15T00:06:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"docs: reduce readme (#483)\n\nReducing the readme to a minimum to get ready for launching our doc site.\r\n---------\r\nCo-authored-by: AnneCYH <69107893+AnneCYH@users.noreply.github.com>","shortMessageHtmlLink":"docs: reduce readme (#483)"}},{"before":"69200f62d74744dae4a82bd80f10089c66b02e92","after":"6b170f529066d6598bc5cbd5c5693fde526144f5","ref":"refs/heads/master","pushedAt":"2024-08-14T04:56:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"docs: tweak per Anne's feedback (#484)\n\nClarify what \"this\" refers to now that *this* is in a different section.","shortMessageHtmlLink":"docs: tweak per Anne's feedback (#484)"}},{"before":"45629c61e2c9a8141dfb4d4d605126cc1fd95f42","after":"69200f62d74744dae4a82bd80f10089c66b02e92","ref":"refs/heads/master","pushedAt":"2024-08-14T02:28:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"benhoyt","name":"Ben Hoyt","path":"/benhoyt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/999033?s=80&v=4"},"commit":{"message":"docs: add Identities documentation (#479)\n\nThis adds docs for Identities:\r\n\r\n* Access control information under \"API and clients\"\r\n* A \"how to manage identities\" guide\r\n* And an \"Identities\" reference page to define/describe the concept","shortMessageHtmlLink":"docs: add Identities documentation (#479)"}},{"before":"51e64e4a26f468fdb6b29cf8c3c4f9b2d00ccf87","after":"45629c61e2c9a8141dfb4d4d605126cc1fd95f42","ref":"refs/heads/master","pushedAt":"2024-08-13T04:12:11.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"docs: enrich the landing page with basic concepts (#472)\n\nImprove the definition of Pebble and add fundamentals.\r\nCo-authored-by: Ben Hoyt ","shortMessageHtmlLink":"docs: enrich the landing page with basic concepts (#472)"}},{"before":"fb61907594a4a37d9189d44952c9d63e4d57169d","after":"51e64e4a26f468fdb6b29cf8c3c4f9b2d00ccf87","ref":"refs/heads/master","pushedAt":"2024-08-13T04:11:35.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"fix(overlord): pebble hangs with a read-only file system when starting the daemon (#481)\n\nFix an issue where the Pebble daemon fails to start with a read-only file system.","shortMessageHtmlLink":"fix(overlord): pebble hangs with a read-only file system when startin…"}},{"before":"d56c1b86a4feec743f056a9330d2e5407cf24cbd","after":"fb61907594a4a37d9189d44952c9d63e4d57169d","ref":"refs/heads/master","pushedAt":"2024-08-13T02:37:32.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"chore: minor improvement to docs generation (#477)\n\nMinor fix to the automated doc generation.","shortMessageHtmlLink":"chore: minor improvement to docs generation (#477)"}},{"before":"81f57da6e70a827bd56964e7ea90babaa4ca3c57","after":"d56c1b86a4feec743f056a9330d2e5407cf24cbd","ref":"refs/heads/master","pushedAt":"2024-08-12T00:46:04.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"benhoyt","name":"Ben Hoyt","path":"/benhoyt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/999033?s=80&v=4"},"commit":{"message":"fix(cmdstate): don't store execSetup and environment in state (#478)\n\nPer #411, the environment (and other task data) can get quite large for\r\nexec objects. Given that exec commands are one-shot and only relevant\r\nfor the current run of Pebble, there's no need to persist them.\r\n\r\nNote that none of this data is in \"api-data\" so it's not accessible via\r\nthe API at all right now, and so this is a non-breaking change.\r\n\r\nLater if we want to make exec tasks a bit more introspectable we can add\r\nthe command line or other fields to \"api-data\" (but we shouldn't add the\r\nentire environment).\r\n\r\nFixes #411.","shortMessageHtmlLink":"fix(cmdstate): don't store execSetup and environment in state (#478)"}},{"before":"aa718195299a8e4cfc0976cd525a905611182211","after":"81f57da6e70a827bd56964e7ea90babaa4ca3c57","ref":"refs/heads/master","pushedAt":"2024-08-08T01:39:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"docs: add explanations for how to manage service dependencies (#440)\n\nA how-to guide on managing service dependencies.","shortMessageHtmlLink":"docs: add explanations for how to manage service dependencies (#440)"}},{"before":"dcd37f3357d1b090de9718d2d975bf50c6750621","after":"aa718195299a8e4cfc0976cd525a905611182211","ref":"refs/heads/master","pushedAt":"2024-08-07T02:18:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"docs: update tutorial according to review (#471)\n\nMinor changes to the tutorial according to Anne's suggestion.","shortMessageHtmlLink":"docs: update tutorial according to review (#471)"}},{"before":"d3a4408edb695785767467e72fa9d18d05678b97","after":"dcd37f3357d1b090de9718d2d975bf50c6750621","ref":"refs/heads/master","pushedAt":"2024-08-06T04:55:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"benhoyt","name":"Ben Hoyt","path":"/benhoyt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/999033?s=80&v=4"},"commit":{"message":"fix(overlord): send EOF to master pty in interactive mode (#466)\n\nIf the interactive mode is enforced in `pebble exec`, there are\r\nscenarios like:\r\n\r\n```go run ./cmd/pebble exec -i -- tee < ./HACKING.md```\r\n\r\nthat would prompt the server to shutdown the execution earlier than the whole output from 'tee' will be read and sent to the client. Hence, instead of closing the master pty descriptor when there is no more input from the client, send\r\nCtrl-D (EOF) to indicate to the process that there will be no more input.\r\n\r\nFixes #306.","shortMessageHtmlLink":"fix(overlord): send EOF to master pty in interactive mode (#466)"}},{"before":"1f50b018ce2a34fb60a442c2a1cdfca70c16f9cd","after":"d3a4408edb695785767467e72fa9d18d05678b97","ref":"refs/heads/master","pushedAt":"2024-08-05T20:58:04.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"benhoyt","name":"Ben Hoyt","path":"/benhoyt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/999033?s=80&v=4"},"commit":{"message":"docs: tweaks according to latest readme changes (#470)\n\n[Recent changes made to the\r\nREADME](https://github.com/canonical/pebble/commit/c330d5f0f37cd7c47b4ec3ce094b39e43fb3f6b4)\r\nshould be made to the doc site as well.\r\n\r\nCloses #468.","shortMessageHtmlLink":"docs: tweaks according to latest readme changes (#470)"}},{"before":"d82655670324716c5e88e102c25c3e1f7f2eb0bc","after":"1f50b018ce2a34fb60a442c2a1cdfca70c16f9cd","ref":"refs/heads/master","pushedAt":"2024-08-05T08:38:31.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"docs: restructure references (#461)\n\nStructural changes to the reference docs.","shortMessageHtmlLink":"docs: restructure references (#461)"}},{"before":"59cada8b18c4507571e01cbb10eca218f14f60c7","after":"d82655670324716c5e88e102c25c3e1f7f2eb0bc","ref":"refs/heads/master","pushedAt":"2024-08-01T06:07:50.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"docs: automate cmd reference docs generation (#458)\n\nA script to help generate CLI CMD reference docs.","shortMessageHtmlLink":"docs: automate cmd reference docs generation (#458)"}},{"before":"2aca1fffb36a80c8c7f577c6453bc27e4a748014","after":"59cada8b18c4507571e01cbb10eca218f14f60c7","ref":"refs/heads/master","pushedAt":"2024-08-01T06:06:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"IronCore864","name":"Tiexin Guo","path":"/IronCore864","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/19277614?s=80&v=4"},"commit":{"message":"docs: improvements based on feedback from anne and daniele (#459)\n\nMinor docs improvements.","shortMessageHtmlLink":"docs: improvements based on feedback from anne and daniele (#459)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yNVQyMjowMjozOS4wMDAwMDBazwAAAATA1bHF","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOC0wMVQwNjowNjoyOS4wMDAwMDBazwAAAASOxaOc"}},"title":"Activity · canonical/pebble"}