{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":20445947,"defaultBranch":"3.6","name":"juju","ownerLogin":"juju","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2014-06-03T14:28:10.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/4604548?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1715233049.0","currentOid":""},"activityList":{"items":[{"before":"ff892666b6b45846d362194db68e312895e6170b","after":"e7341a72032ce19a91f78d8f8235ca44bd7ea356","ref":"refs/heads/main","pushedAt":"2024-05-16T21:45:48.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17385 from manadart/dqlite-secret-state-sql\n\nhttps://github.com/juju/juju/pull/17385\n\nThe secret domain state has some semantically and algebraically inefficient SQL.\n\nThis change includes one example of rectifying this, which should be used to further improve the package.","shortMessageHtmlLink":"Merge pull request #17385 from manadart/dqlite-secret-state-sql"}},{"before":"a22c536359913a6ea5f1c4b7553865a408dfb960","after":"ff892666b6b45846d362194db68e312895e6170b","ref":"refs/heads/main","pushedAt":"2024-05-16T13:02:50.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17359 from juju/increment-to-4.0-beta4\n\nhttps://github.com/juju/juju/pull/17359\n\nIncrement juju to 4.0-beta4","shortMessageHtmlLink":"Merge pull request #17359 from juju/increment-to-4.0-beta4"}},{"before":"ad87b5a49f477a1b5c6f4d4cb75bdfa842e9a524","after":"315e7efa32767272196ca6d4a1b0dbacf0a8fa9f","ref":"refs/heads/3.3","pushedAt":"2024-05-16T10:36:17.000Z","pushType":"pr_merge","commitsCount":6,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17384 from jack-w-shaw/3.1-into-3.3\n\nhttps://github.com/juju/juju/pull/17384\n\nForward merge:\n- https://github.com/juju/juju/pull/17380\n\nNo conflicts","shortMessageHtmlLink":"Merge pull request #17384 from jack-w-shaw/3.1-into-3.3"}},{"before":"57070f712f26ba07432c04fbd0f3d0f95a75a185","after":"ad87b5a49f477a1b5c6f4d4cb75bdfa842e9a524","ref":"refs/heads/3.3","pushedAt":"2024-05-16T09:37:37.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17382 from hmlanigan/not-equal\n\nhttps://github.com/juju/juju/pull/17382\n\nA typo in the original add of the printing to error log when we know the deploy will fail due to mismatching machine scoped platforms in placement..\n\nFollow on to #17366 \n\n## Checklist\n\n- [x] Code style: imports ordered, good names, simple structure, etc\n- ~[ ] Comments saying why design decisions were made~\n- ~[ ] Go unit tests, with comments saying what you're testing~\n- ~[ ] [Integration tests](https://github.com/juju/juju/tree/main/tests), with comments saying what you're testing~\n- ~[ ] [doc.go](https://discourse.charmhub.io/t/readme-in-packages/451) added or updated in changed packages~\n\n## QA steps\n\nWhen running the following tests, the error message should only be printed for TestDeducePlatformPlacementMutipleMatchFail. \n\n```\n(cd apiserver/facades/client/application; go test -gocheck.v -gocheck.f validatorSuite)\n```","shortMessageHtmlLink":"Merge pull request #17382 from hmlanigan/not-equal"}},{"before":"e85604819c4b18ff4faa763b7f52b0c497fd3c48","after":"02b1160d9d515dcc0244d31d05ea50f59bec5589","ref":"refs/heads/3.1","pushedAt":"2024-05-16T09:17:10.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17383 from jack-w-shaw/2.9-into-3.1\n\nhttps://github.com/juju/juju/pull/17383\n\nForward merge:\n- https://github.com/juju/juju/pull/17380\n\nNo conflicts","shortMessageHtmlLink":"Merge pull request #17383 from jack-w-shaw/2.9-into-3.1"}},{"before":"cfad18ebe935ee404a27d66f871263bb3a53aba1","after":"78004ae170222aed7b2c97fad6f98c3bbd44dee3","ref":"refs/heads/2.9","pushedAt":"2024-05-16T08:55:55.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17380 from jack-w-shaw/bump_os_patch\n\nhttps://github.com/juju/juju/pull/17380\n\nBump version of juju/os/v2\n\nIn juju/os/v2 v2.2.4, we incorrectly hardcoded the version of the noble release of Ubuntu as `24.40`. It should be `24.04`.\n\nWe fix this in `v2.2.5`. See:\nhttps://github.com/juju/os/releases/tag/v2.2.5\n\n## QA steps\n\n### Bootstrap juju\n```\njuju bootstrap lxd lxd-2.9\n```\n\n### Deploy to noble\n\nDownload and modify a local charm\n```\n$ juju download ubuntu\n$ unzip ubuntu_r24.charm\n(edit manifest.yaml & metadata.yaml such that)\n$ cat ubuntu/manifest.yaml\nbases:\n - architectures:\n - amd64\n channel: '20.04'\n name: ubuntu\n - architectures:\n - amd64\n channel: '22.04'\n name: ubuntu\n - architectures:\n - amd64\n channel: '24.04'\n name: ubuntu\n\n$ cat metadata.yaml\nname: ubuntu\nsummary: A pristine Ubuntu Server\nmaintainer: Charmers \ndescription: |\n This simply deploys the Ubuntu Cloud/Server image\ntags:\n - misc\nseries:\n - focal\n - bionic\n - jammy\n - noble\n...\n``` \n\nDeploy\n```\n$ juju deploy ./ubuntu --series noble\n$ juju status\nModel Controller Cloud/Region Version SLA Timestamp\ndefault lxd-2.9 localhost/localhost 2.9.50.1 unsupported 08:16:15+01:00\n\nApp Version Status Scale Charm Channel Rev Exposed Message\nubuntu 24.04 active 1 ubuntu 0 no\n\nUnit Workload Agent Machine Public address Ports Message\nubuntu/1* active idle 1 10.219.211.30\n\nMachine State Address Inst id Series AZ Message\n1 started 10.219.211.30 juju-ec6a7e-1 noble Running\n```","shortMessageHtmlLink":"Merge pull request #17380 from jack-w-shaw/bump_os_patch"}},{"before":"aeec03cb1ccd35066742a573f3a227969e4a5836","after":"03b5c0b74206a2943c03ad682362b1fcac84d797","ref":"refs/heads/3.6","pushedAt":"2024-05-16T06:13:40.000Z","pushType":"pr_merge","commitsCount":69,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17379 from Aflynn50/3.6\n\nhttps://github.com/juju/juju/pull/17379\n\nMerge up from 3.5 to 3.6. Only conflicts were the version number.\n\n- #17373 from Aflynn50\n - #17368 from wallyworld\n - #17340 from ycliuhw\n - #17353 from cderici\n - #17365 from wallyworld\n - #17313 from cderici\n - #17321 from Aflynn50\n - #17283 from Aflynn50\n - #17236 from juju/dependabot/go_modules/golang.org/x\n - #17221 from jameinel\n- #17309 from babakks/css-8360\n- #17345 from juju\n- #17314 from hpidcock\n- #17275 from juju","shortMessageHtmlLink":"Merge pull request #17379 from Aflynn50/3.6"}},{"before":"06fd6aa552904b6ce2196d0a9e9c9c6770b174cb","after":"a22c536359913a6ea5f1c4b7553865a408dfb960","ref":"refs/heads/main","pushedAt":"2024-05-15T19:06:45.000Z","pushType":"pr_merge","commitsCount":6,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17255 from SimonRichardson/fix-domain-errors\n\nhttps://github.com/juju/juju/pull/17255\n\nThis masks all sql, sqlite and dqlite errors so they're not available via errors.Is or errors.As. All errors should be trapped at the domain layer and not leaked outside. Thus the API client and server are never coupled to the underlying database errors.\n\nDropping the older domain errors for specific domain type errors gives more focused errors that can be trapped at the API server layer.\n\n\n\n## Checklist\n\n\n\n- [x] Code style: imports ordered, good names, simple structure, etc\n- [x] Comments saying why design decisions were made\n- [x] Go unit tests, with comments saying what you're testing\n\n## QA steps\n\n```\nTEST_PACKAGES=\"./domain/...\" make run-go-tests\n```\n\n## Links\n\n**Jira card:** JUJU-","shortMessageHtmlLink":"Merge pull request #17255 from SimonRichardson/fix-domain-errors"}},{"before":"62599cea823bd9aabe025cbe73488dcf5273b69f","after":"f7c7d8a9c81f589e2f151814e3de8216260c54e1","ref":"refs/heads/3.5","pushedAt":"2024-05-15T09:58:56.000Z","pushType":"pr_merge","commitsCount":43,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17373 from Aflynn50/3.4-3.5\n\nhttps://github.com/juju/juju/pull/17373\n\nMerge up from 3.4. The only conflicts were in the cla Github action which was upgraded, and go.mod which was resolved in favor of the higher versions.\n\nCommits merged up in this PR are:\n- #17368 from wallyworld\n - #17340 from ycliuhw\n - #17353 from cderici\n - #17365 from wallyworld\n- #17313 from cderici\n- #17321 from Aflynn50\n - #17283 from Aflynn50\n - #17236 from juju/dependabot/go_modules/golang.org/x\n - #17221 from jameinel","shortMessageHtmlLink":"Merge pull request #17373 from Aflynn50/3.4-3.5"}},{"before":"ace8dbe7359608fd4d5245132987a77b9de9343b","after":"06fd6aa552904b6ce2196d0a9e9c9c6770b174cb","ref":"refs/heads/main","pushedAt":"2024-05-15T09:10:15.000Z","pushType":"pr_merge","commitsCount":9,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17354 from ycliuhw/implement-secret-rotated\n\nhttps://github.com/juju/juju/pull/17354\n\nThis PR implements a secret rotated service and state methods to ensure the next rotation time for the provided secret stored in the Dqlite database.\nDriveby: \n1. fixed the missing next rotation time update in SecretUpdate call.\n2. add UNIQUE INDEX for secret_backend_type.type.\n3. align fields for secrets DDL.\n\n## Checklist\n\n- [x] Code style: imports ordered, good names, simple structure, etc\n- [x] Comments saying why design decisions were made\n- [x] Go unit tests, with comments saying what you're testing\n- [ ] ~[Integration tests](https://github.com/juju/juju/tree/main/tests), with comments saying what you're testing~\n- [ ] ~[doc.go](https://discourse.charmhub.io/t/readme-in-packages/451) added or updated in changed packages~\n\n## QA steps\n\nBecause the WatchSecretsRotationChanges watcher has not been implemented yet, we can only test the rotation policy changes.\n\n```\njuju exec --unit dummy-source/0 \"secret-add data=foo\"\nsecret://2bfad23f-a54d-48ed-87ec-e2776e2ea0b4/cotiv4uc5e02l6npsdm0\n\njuju exec --unit dummy-source/0 \"secret-set cotiv4uc5e02l6npsdm0 --rotate hourly\"\n```\n\n```\ndqlite> select prdesc from secret_rotation\ncotiv4uc5e02l6npsdm0|2024-05-08 07:57:02.922271014 +0000 UTC\ndqlite> select srp.policy from secret_metadata sm inner join secret_rotate_policy srp on sm.rotate_policy_id = srp.id\nhourly\n```\n\n## Documentation changes\n\nNo\n\n## Links\n\n**Jira card:** JUJU-5897","shortMessageHtmlLink":"Merge pull request #17354 from ycliuhw/implement-secret-rotated"}},{"before":"57701869ec654a514f25c0aaff4237fac09b82ad","after":"ace8dbe7359608fd4d5245132987a77b9de9343b","ref":"refs/heads/main","pushedAt":"2024-05-15T07:33:56.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17377 from tlm/juju-6020-remove-unit-watch-config-settings\n\nhttps://github.com/juju/juju/pull/17377\n\nWhen performing the work break down the moving charms to DQlite we have noticed that WatchConfigChange for a unit is not being used. This commit removes the unused code paths to make it easier for this further work to occur.\n\n## Checklist\n\n- ~[ ] Code style: imports ordered, good names, simple structure, etc~\n- ~[ ] Comments saying why design decisions were made~\n- ~[ ] Go unit tests, with comments saying what you're testing~\n- ~[ ] [Integration tests](https://github.com/juju/juju/tree/main/tests), with comments saying what you're testing~\n- ~[ ] [doc.go](https://discourse.charmhub.io/t/readme-in-packages/451) added or updated in changed packages~\n\n## QA steps\n\nCheck the binaries still compile and the code paths have been safely removed.\n\n## Documentation changes\n\nN/A\n\n## Links\n\n**Jira card:** JUJU-6020","shortMessageHtmlLink":"Merge pull request #17377 from tlm/juju-6020-remove-unit-watch-config…"}},{"before":"a6a13a35989eda27a5d8d4ad91c4e555effe189d","after":"57701869ec654a514f25c0aaff4237fac09b82ad","ref":"refs/heads/main","pushedAt":"2024-05-15T06:54:12.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17376 from tlm/juju-6020-remove-watch-charm-config\n\nhttps://github.com/juju/juju/pull/17376\n\nAs part of the work investigating moving charms to DQlite we have found there exists a WatchCharmConfig watcher that isn't being used inside of Juju.\n\nThis can safely be removed as part of the transition.\n\n## Checklist\n\n- ~[ ] Code style: imports ordered, good names, simple structure, etc~\n- ~[ ] Comments saying why design decisions were made~\n- ~[ ] Go unit tests, with comments saying what you're testing~\n- ~[ ] [Integration tests](https://github.com/juju/juju/tree/main/tests), with comments saying what you're testing~\n- ~[ ] [doc.go](https://discourse.charmhub.io/t/readme-in-packages/451) added or updated in changed packages~\n\n## QA steps\n\nRemoving unused code. Confirm there are no code paths by compiling.\n\n## Documentation changes\n\nN/A\n\n## Links\n\n**Jira card:** JUJU-6020","shortMessageHtmlLink":"Merge pull request #17376 from tlm/juju-6020-remove-watch-charm-config"}},{"before":"48d82f2cb942e1a08ddba657e5dde72045f9dafa","after":"57070f712f26ba07432c04fbd0f3d0f95a75a185","ref":"refs/heads/3.3","pushedAt":"2024-05-14T21:33:28.000Z","pushType":"pr_merge","commitsCount":11,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17366 from hmlanigan/panic-nil-pointer\n\nhttps://github.com/juju/juju/pull/17366\n\nThe nil pointer panic was due to not checking the Arch pointer wasn't nil before using. Turns out that we aren't writing the architecture of LXD containers to their instance data. \n\nTo deploy a charm, we need a platform composed of architecture, os and channel, e.g. amd64/ubuntu/22.04. When deploying to existing machines it's essential that we can find out the architecture to find the correct charm blob. \n\nAdded code to write the architecture of the LXD container to their instance data when created to solve the above problem.\n\nTo fix this scenario for existing users, both upgrade and migration steps are necessary. The KVM container manager already assumes that the architecture is the same as the host. LXD only supports the same architecture. Therefore upgrade and migration is straightforward.\n\nWhile in the placement code for deploy, fixed a few holes:\n- Require the instance data to be able before deploying when a machine scoped placement directive.\n- Ensure we find all machines when attempting to find the base for deploy.\n- Match the placement machine deployed base with any requested base from the user.\n\nWe had a placement directive ploy test, I enhanced it to include a container. For LXD providers, the host machine is created as a virtual-machine to enable nested containers.\n\n\n## Checklist\n\n- [x] Code style: imports ordered, good names, simple structure, etc\n- [x] Comments saying why design decisions were made\n- [x] Go unit tests, with comments saying what you're testing\n- ~[ ] [Integration tests](https://github.com/juju/juju/tree/main/tests), with comments saying what you're testing~\n- ~[ ] [doc.go](https://discourse.charmhub.io/t/readme-in-packages/451) added or updated in changed packages~\n\n## QA steps\n\nUpdated the test for deploying a charm with placement to catch this case, it's the second test.\n```\n(cd tests ; ./main.sh -v deploy test_deploy_charms )\n```\n\nManual qa\n```\n# bootstrap controller for upgrade and migration tests.\n$ snap install juju_334 --channel 3.3/stable\n$ juju_334 bootstrap localhost three-three-stable\n\n$ juju_334 add-model upgrade-me\n$ juju_334 add-machine --constraints virt-type=virtual-machine\n$ juju_334 add-machine lxd:0\n\n$ juju_334 add-model migrate-me\n$ juju_334 add-machine --constraints virt-type=virtual-machine\n$ juju_334 add-machine lxd:0\n\n# you can verify the panic at this point if you wish on either model\n\n-------------------------------------------------------------------------------------------------\n\n# Using the juju under test, bootstrap\n$ juju bootstrap localhost destination\n\n# Create a model to test.\n# Machine 0 should be running 22.04, machine 1 should be running 20.04\n$ juju add-model test-no-panic\n$ juju add-machine --constraints virt-type=virtual-machine\ncreated machine 0\n$ juju add-machine lxd:0\ncreated container 0/lxd/0\n$ juju add-machine --constraints virt-type=virtual-machine --base ubuntu@20.04\ncreated machine 1\n$ juju add-machine lxd:1 --base ubuntu@20.04\ncreated container 1/lxd/0\n\n# Test nil pointer panic doesn't happen.\n$ juju deploy ubuntu-lite --to 0/lxd/0\nDeployed \"ubuntu-lite\" from charm-hub charm \"ubuntu-lite\", revision 1 in channel latest/stable on ubuntu@22.04/stable\n\n# Test the correct base is chosen\n$ juju deploy ubuntu-lite --to 1/lxd/0 ubuntu-lite-focal\n\n# Depending on how fast you run the commands, deploy will fail if the machine or container\n# machine scoped in the placement directive does not exist. We're unable to find the base\n# for deployment until the machine base and instance data is filled in.\n$ juju deploy ubuntu-lite --to 1/lxd/0 ubuntu-lite-focal\nERROR machine \"1/lxd/0\" not started, please retry when started\nERROR failed to deploy charm \"ubuntu-lite\"\n\n# Retry works, with the correct base found for the container.\n# $ juju deploy ubuntu-lite --to 1/lxd/0 ubuntu-lite-focal\nDeployed \"ubuntu-lite-focal\" from charm-hub charm \"ubuntu-lite\", revision 1 in channel latest/stable on ubuntu@20.04/stable\n\n# Attempting to deploy to 2 existing machines with different bases should fail.\n$ juju deploy ubuntu-lite --to 1/lxd/1,0/lxd/0 -n 2 ubuntu-lite-jammy\nERROR bases of existing placement machines do not match each other\nERROR failed to deploy charm \"ubuntu-lite\"\n\n# Specifying a base different from the machine scoped placement directive should fail.\n$ juju deploy ubuntu-lite --to 1/lxd/1 ubuntu-lite-jammy --base ubuntu@22.04\nERROR base from placements, \"amd64/ubuntu/20.04/stable\", does not match requested base \"amd64/ubuntu/22.04/stable\"\nERROR failed to deploy charm \"ubuntu-lite\"\n\n-------------------------------------------------------------------------------------------------\n\n# Verify migration resolves the nil pointer panic.\n$ juju switch three-three\n$ juju migrate migrate-me destination\nMigration started with ID \"ea982527-9234-4fa8-85a1-9dd8844b90be:0\"\n$ juju switch destination:admin/migrate-me\n$ juju deploy ubuntu-lite --to 0/lxd/0\nDeployed \"ubuntu-lite\" from charm-hub charm \"ubuntu-lite\", revision 1 in channel latest/stable on ubuntu@22.04/stable\n\n-------------------------------------------------------------------------------------------------\n\n# Verify upgrade resolves the nil pointer panic.\n$ juju switch three-three:admin/test-no-panic\n$ juju upgrade-controller --build-agent\n$ juju upgrade-model\n$ juju deploy ubuntu-lite --to 0/lxd/0\nDeployed \"ubuntu-lite\" from charm-hub charm \"ubuntu-lite\", revision 1 in channel latest/stable on ubuntu@22.04/stable\n\n## Links\n\n**Launchpad bug:** https://bugs.launchpad.net/juju/+bug/2064174\n\n**Jira card:** JUJU-5984","shortMessageHtmlLink":"Merge pull request #17366 from hmlanigan/panic-nil-pointer"}},{"before":"2d2ebf294f8fdbe21773755ff8a6ca4d3c2f464c","after":"a6a13a35989eda27a5d8d4ad91c4e555effe189d","ref":"refs/heads/main","pushedAt":"2024-05-14T15:24:44.000Z","pushType":"pr_merge","commitsCount":5,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17375 from manadart/dqlite-fix-secrets-state\n\nhttps://github.com/juju/juju/pull/17375\n\nThis change is mechanical only and is constituted by:\n- Indentation of SQL/DML according to our agreed-upon standards.\n- Shortened line lengths - 120 for code, and 80 for comments.\n- Corrected method names in comments.\n- Removal of redundant object creation for supply as SQLair type samples.\n- Removal of redundant slice creation for appending to SQLair type samples.","shortMessageHtmlLink":"Merge pull request #17375 from manadart/dqlite-fix-secrets-state"}},{"before":"6de0ee5e450075e20bac1ec343e6599a8f806cd6","after":"2d2ebf294f8fdbe21773755ff8a6ca4d3c2f464c","ref":"refs/heads/main","pushedAt":"2024-05-14T11:31:19.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17371 from tlm/model-finaliser-rename\n\nhttps://github.com/juju/juju/pull/17371\n\nNaming things can be hard. Several months ago we introduced the concept of finalising a model during the creation process. This allows a model and all of the model components to be built up over disparate transactions.\n\nWe use the keyworld finalised to represent a model and it's finished state during this process. It has been decided to rename finalised to activated better representing what is being done.\n\nThis PR is focused on just a rename change and does not change any logic.\n\n## Checklist\n\n- [x] Code style: imports ordered, good names, simple structure, etc\n- [x] Comments saying why design decisions were made\n- [x] Go unit tests, with comments saying what you're testing\n- ~[ ] [Integration tests](https://github.com/juju/juju/tree/main/tests), with comments saying what you're testing~\n- ~[ ] [doc.go](https://discourse.charmhub.io/t/readme-in-packages/451) added or updated in changed packages~\n\n## QA steps\n\nUnit tests are sufficient.\n\n## Documentation changes\n\nN/A","shortMessageHtmlLink":"Merge pull request #17371 from tlm/model-finaliser-rename"}},{"before":"18b70332f870e1132ded317160747416812127c6","after":"6de0ee5e450075e20bac1ec343e6599a8f806cd6","ref":"refs/heads/main","pushedAt":"2024-05-14T10:14:04.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17369 from SimonRichardson/remove-redundant-methods-from-logger\n\nhttps://github.com/juju/juju/pull/17369\n\nThe logger interface was copied from loggo.Logger type. It has a lot\nof syntax sugar for accessing log levels, or the difference between Child\nand ChildWithTags. In reality you can just use IsLevelEnabled or Child that\nredirects to ChildWithTags. The motivation for doing this is to make a concise\nlogger interface that could be used with loggo, or backed with different\nimplementations.\n\nThe logger interface then becomes:\n\n```go\n// Logger is an interface that provides logging methods.\ntype Logger interface {\n // Critical logs a message at the critical level.\n Criticalf(msg string, args ...any)\n\n // Error logs a message at the error level.\n Errorf(msg string, args ...any)\n\n // Warning logs a message at the warning level.\n Warningf(msg string, args ...any)\n\n // Info logs a message at the info level.\n Infof(msg string, args ...any)\n\n // Debug logs a message at the debug level.\n Debugf(msg string, args ...any)\n\n // Trace logs a message at the trace level.\n Tracef(msg string, args ...any)\n\n // Log logs some information into the test error output.\n // The provided arguments are assembled together into a string with\n // fmt.Sprintf.\n Logf(level Level, format string, args ...any)\n\n // IsLevelEnabled returns true if the given level is enabled for the logger.\n IsLevelEnabled(Level) bool\n\n // Child returns a new logger with the given name.\n Child(name string, tags ...string) Logger\n\n // GetChildByName returns a child logger with the given name.\n GetChildByName(name string) Logger\n}\n```\n\n\nThere are two additional changes that are still outstanding that will follow this \nchange request:\n\n 1. Removal of the `GetChildByName` from the Logger. This sole purpose is access a logger by the absolute name. This is only used in the uniter in one location throughout juju. Instead of requesting it from the current logger and walking it's child/parent relationship, we should pass in the context into the unit, so it can retrieve it from there instead.\n 2. Adding context.Context as the first argument. Thus allowing us to start adding trace ids as labels to the logs.\n\n## Checklist\n\n\n\n- [x] Code style: imports ordered, good names, simple structure, etc\n- [x] Comments saying why design decisions were made\n- [x] Go unit tests, with comments saying what you're testing\n\n## QA steps\n\nWe need to ensure that tracing is still available.\n\n```\n$ juju bootstrap lxd test\n$ juju debug-log -m controller\n$ juju model-config -m controller logging-config=\"=TRACE\"\n```\n\n## Links\n\n**Jira card:** JUJU-","shortMessageHtmlLink":"Merge pull request #17369 from SimonRichardson/remove-redundant-metho…"}},{"before":"ecfeccf3c239bcb5e5cf9410c76f47bfd102e6da","after":"18b70332f870e1132ded317160747416812127c6","ref":"refs/heads/main","pushedAt":"2024-05-14T04:38:42.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17367 from ycliuhw/fix-secret-ci\n\nhttps://github.com/juju/juju/pull/17367\n\nThis PR disabled auto prune and drain secret bash tests because they are not implemented in Dqlite yet.\n\n```\n./main.sh -v -p microk8s '\"\"' secrets_iaas test_secrets_juju\n\n./main.sh -v -p microk8s '\"\"' secrets_iaas test_secrets_cmr\n```","shortMessageHtmlLink":"Merge pull request #17367 from ycliuhw/fix-secret-ci"}},{"before":"804e5b0032a3b7d287517c45e04230f304cbcea3","after":"48d82f2cb942e1a08ddba657e5dde72045f9dafa","ref":"refs/heads/3.3","pushedAt":"2024-05-13T21:01:40.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17370 from cderici/fix-controllercharm-prometheus-test-follow-up\n\nhttps://github.com/juju/juju/pull/17370\n\nFollow up on #17353, attempting to unblock ci-gating tests to unblock 3.3+ releases.\n\nIt replaces the last check for p1 in the test with a ` wait_for`, which will timeout if p1 doesn't go into healty active state.","shortMessageHtmlLink":"Merge pull request #17370 from cderici/fix-controllercharm-prometheus…"}},{"before":"ec7d269292f7d273b56fdd68926689f995d5f55a","after":"7d09b607b8f6f26188f6584c44180503624130d7","ref":"refs/heads/3.4","pushedAt":"2024-05-13T15:59:21.000Z","pushType":"pr_merge","commitsCount":8,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17368 from wallyworld/merge-3.3-20240513\n\nhttps://github.com/juju/juju/pull/17368\n\nMerge 3.3\n\nhttps://github.com/juju/juju/pull/17340 [from ycliuhw/fix/lp-2064772](https://github.com/juju/juju/commit/322312b16b0213bf03895433f0d1cbeb589a5e4e)\nhttps://github.com/juju/juju/pull/17353 [from cderici/fix-controllercharm-prometheus…](https://github.com/juju/juju/commit/a5c211deefb184914372b8250af7e8c10413759b)\nhttps://github.com/juju/juju/pull/17365 [from wallyworld/fix-secret-watcher](https://github.com/juju/juju/commit/804e5b0032a3b7d287517c45e04230f304cbcea3)","shortMessageHtmlLink":"Merge pull request #17368 from wallyworld/merge-3.3-20240513"}},{"before":"7aa578c884bcdcf5be6f4970f893da11244cf23c","after":"ecfeccf3c239bcb5e5cf9410c76f47bfd102e6da","ref":"refs/heads/main","pushedAt":"2024-05-13T13:55:54.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17339 from tlm/juju-5342-model-config-facades\n\nhttps://github.com/juju/juju/pull/17339\n\nThis updates the client facade to no longer use stale model config from mongo and instead pull agent version from DQlite for a model. This is a much nicer transition as the facade does not require model config anymore for agent version information.\n\n## Checklist\n\n- [x] Code style: imports ordered, good names, simple structure, etc\n- [x] Comments saying why design decisions were made\n- [x] Go unit tests, with comments saying what you're testing\n- ~[ ] [Integration tests](https://github.com/juju/juju/tree/main/tests), with comments saying what you're testing~\n- ~[ ] [doc.go](https://discourse.charmhub.io/t/readme-in-packages/451) added or updated in changed packages~\n\n## QA steps\n\nDeploy a cass controller and model and confirm you can deploy an application.\n\n## Documentation changes\n\nN/A\n\n## Links\n\n**Jira card:** JUJU-5342","shortMessageHtmlLink":"Merge pull request #17339 from tlm/juju-5342-model-config-facades"}},{"before":"deff7a5b2f22d34737c72d2f998bf816e5a4f474","after":"7aa578c884bcdcf5be6f4970f893da11244cf23c","ref":"refs/heads/main","pushedAt":"2024-05-13T13:10:02.000Z","pushType":"pr_merge","commitsCount":12,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17285 from SimonRichardson/swap-loggers\n\nhttps://github.com/juju/juju/pull/17285\n\nThis standardizes all of the logging in juju to one and only one interface. This will ensure that when we implement status history we can guarantee that the logging is correctly nested and can pass labels through.\n\nThis is a lot of work to push this all through. This PR is all about swapping out the direct calls to loggo and using the core logger package Logger interface. The backing for the Logger interface is still loggo. There should be not change to logging in juju, this refactoring provides numerous advantages:\n\n 1. Standardize logging, there is only one way to do it.\n 2. As `loggo.Logger` was self-referential (type refers to itself: Child as an example) it was becoming difficult to use when each package had its own logger interface.\n 3. Testing becomes simpler, by using CheckLog, we can just write to the testing context. No loggo is involved. \n 4. Removal of over ~1.7k~ ~2.1k~ 5k lines of code, which reduces complexity.\n\nThe disadvantage is that once you pull on a thread, you have to change it all.\n\n### Future work\n\n 1. Context will be added to all logging methods in the future. Giving the option of linking traces to logs and vica-versa. \n 2. Each model logger will have the model UUID associated with the model logger, removing the logsink in the modelworker. The writing of model logs will then be written to the right logs based on the record, thus simplifying the logging.\n 3. Status history can then be written to a log, and it will be written to the correct model log based on 2.\n\n\n\n## Checklist\n\n\n\n- [x] Code style: imports ordered, good names, simple structure, etc\n- [x] Comments saying why design decisions were made\n- [x] Go unit tests, with comments saying what you're testing\n\n## QA steps\n\n```sh\n$ juju bootstrap lxd test --debug\n$ juju debug-log -m controller\n$ juju add-model default\n$ juju deploy ubuntu\n$ juju debug-log\n```\n\n## Links\n\n\n**Jira card:** JUJU-5956","shortMessageHtmlLink":"Merge pull request #17285 from SimonRichardson/swap-loggers"}},{"before":"6745ac5ae0587614d63fa4390f471f27d6bc408b","after":"62599cea823bd9aabe025cbe73488dcf5273b69f","ref":"refs/heads/3.5","pushedAt":"2024-05-13T10:11:56.000Z","pushType":"pr_merge","commitsCount":17,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17309 from babakks/css-8360/apply-client-in-simple-connector\n\nhttps://github.com/juju/juju/pull/17309\n\n**(Note that this PR is relevant to JIMM controllers which support login with client credentials. So whenever we say *controller*, it's a *JIMM controller*.)**\n\nWhen Juju Terraform Provider uses client credentials (as a service account) to communicate with the API using a `SimpleConnector`, it leaves `SimpleConfig.Username` empty and assigns the client credentials to `SimpleConfig.ClientID` and `SimpleConfig.ClientSecret`.\n\nThe problem is the `NewSimple` function does not take this into account and panics with the following message whenever the `Username` is empty:\n\n```\ninvalid user tag \"\"\n```\n\nThis PR adds a simple check to prevent the panic.\n\n## Checklist\n\n\n\n- [x] Code style: imports ordered, good names, simple structure, etc\n- [x] Comments saying why design decisions were made\n- [ ] ~Go unit tests, with comments saying what you're testing~\n- [ ] ~[Integration tests](https://github.com/juju/juju/tree/main/tests), with comments saying what you're testing~\n- [ ] ~[doc.go](https://discourse.charmhub.io/t/readme-in-packages/451) added or updated in changed packages~\n\n## QA steps\n\nQA-ing this change is a bit complicated because of two reasons:\n\n1. The `NewSimple` function is meant to be used by users of the `juju/juju` module, and hence there's no internal usage in Juju (so we can verify the changes without spinning up other things). To invoke the method, we can use Juju Terraform Provider. Note that, for this purpose, we need to build the provider with the new Juju changes.\n2. We'd need a controller that provides the newly introduced login method, `LoginWithClientCredentials`. If the controller The only controller that supports this method at the moment, is JIMM. Therefore, we need to spin up a JIMM controller. If we try with a non-JIMM controller, instead of a panic we get this error, which is a bit misleading but converts the unsupported state:\n ```\n this version of Juju does not support login from old clients (not supported) (not supported)\n ```\n\nWe can, of course, help out with QA-ing this to make sure it works as expected.\n\nAnyway, the whole QA process should look like this:\n\n0. Build the Juju Terraform Provider with the changes in Juju.\n1. Spin up a JIMM controller.\n2. Create a Terraform plan from this template:\n ```tf\n terraform {\n required_providers {\n juju = {\n source = \"registry.terraform.io/juju/juju\" # (uses local provider repository)\n version = \"=0.12.0\"\n }\n }\n }\n\n provider \"juju\" {\n controller_addresses = \"jimm.localhost:443\"\n\n client_id = \"some-client-id\" # Value not important\n client_secret = \"some-secret\" # Value not important\n\n ca_certificate = <\n\n## Links\n\n\n\n**Launchpad bug:** https://bugs.launchpad.net/juju/+bug/\n\n**Jira card:** JUJU-","shortMessageHtmlLink":"Merge pull request #17309 from babakks/css-8360/apply-client-in-simpl…"}},{"before":"084f4c92adeba96dd481b526a1c9bbbff9d2f388","after":"deff7a5b2f22d34737c72d2f998bf816e5a4f474","ref":"refs/heads/main","pushedAt":"2024-05-11T06:58:23.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17364 from manadart/dqlite-secrets-state-format\n\nhttps://github.com/juju/juju/pull/17364\n\nSimple non-functional change to ensure that the secrets domain state has SQL/DML formatting according to our agreed-upon style.","shortMessageHtmlLink":"Merge pull request #17364 from manadart/dqlite-secrets-state-format"}},{"before":"a5c211deefb184914372b8250af7e8c10413759b","after":"804e5b0032a3b7d287517c45e04230f304cbcea3","ref":"refs/heads/3.3","pushedAt":"2024-05-10T13:29:25.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17365 from wallyworld/fix-secret-watcher\n\nhttps://github.com/juju/juju/pull/17365\n\nThe secret revision watcher takes the secret uris and looks up the secret to hydrate the result. If a secret is deleted, the not found error was escaping and killing workers which used the watcher. If a secret was deleted in the relation broken hook, this broke the relation tear down workflow and the relation was left behind.\n\nThis PR tweaks the watcher to skip over secrets which are not found.\n\n## QA steps\n\nSee the reproducer script in the bug.\n\n```\njuju add-model $MODEL1\n\njuju deploy ./*.charm -m $MODEL1 app1 \njuju deploy ./*.charm -m $MODEL2 app2\n\njuju offer ${MODEL1}.app1:a-relation a-relation\njuju switch ${MODEL2}\njuju consume ${MODEL1}.a-relation\n\njuju relate a-relation app2:b-relation\n\njuju remove-relation a-relation app2:b-relation\n```\n\n## Links\n\nhttps://bugs.launchpad.net/bugs/2065284\n\n**Jira card:** [JUJU-6007](https://warthogs.atlassian.net/browse/JUJU-6007)\n\n\n\n[JUJU-6007]: https://warthogs.atlassian.net/browse/JUJU-6007?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ","shortMessageHtmlLink":"Merge pull request #17365 from wallyworld/fix-secret-watcher"}},{"before":"7f380e6c30803491693fc3421291022fca3e6253","after":"084f4c92adeba96dd481b526a1c9bbbff9d2f388","ref":"refs/heads/main","pushedAt":"2024-05-10T09:36:41.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17363 from SimonRichardson/controller-config-controller-table\n\nhttps://github.com/juju/juju/pull/17363\n\nThere are parts of controller config that shouldn't be stored in the controller config table as key and values. For example the controller UUID should be part of a new controller table. The controller table can then hold values that are known and unlikely to change, whilst also adding the ability to add foreign key constraints to them (RI).\n\nThe service layer doesn't care how the data is laid out, only that it can get a map of keys and values. The state layer translates that to the right table locations.\n\nWe can use a view to simulate the old controller config table with all the values, yet the controller config table just holds scalar or simple string values.\n\n\n\n## Checklist\n\n\n\n- [x] Code style: imports ordered, good names, simple structure, etc\n- [x] Comments saying why design decisions were made\n- [x] Go unit tests, with comments saying what you're testing\n\n## QA steps\n\n### Setup\n\nRun tempo for open telemetry\n\n### Bootstrap\n\nBootstrap to lxd pointing to tempo.\n\n```\n$ juju bootstrap lxd test --config=\"open-telemetry-enabled=true\" --config=\"open-telemetry-insecure=true\" --config=\"open-telemetry-endpoint=\" --config=\"open-telemetry-sample-ratio=1\"\n```\n\n### Other tests\n\nTest that we can't update controller-uuid\n\n```\n$ juju controller-config controller-uuid=deadbeef\nERROR invalid or read-only controller config values cannot be updated: [controller-uuid]\n```\n\nEnsure that validation checks aren't broken\n\n```\n$ juju controller-config query-tracing-threshold=0.5\nERROR query-tracing-threshold: conversion to duration: time: missing unit in duration \"0.5\"\n```\n\nEnsure that the update works\n\n```\n$ juju controller-config query-tracing-threshold=0.5s\n$ juju controller-config query-tracing-threshold\n500ms\n```\n\n## Links\n\n\n\n**Launchpad bug:** https://bugs.launchpad.net/juju/+bug/\n\n**Jira card:** JUJU-","shortMessageHtmlLink":"Merge pull request #17363 from SimonRichardson/controller-config-cont…"}},{"before":"6cfce0ff80925c31d7b3bceaf9182f5dd2af281e","after":"7f380e6c30803491693fc3421291022fca3e6253","ref":"refs/heads/main","pushedAt":"2024-05-09T23:19:59.000Z","pushType":"pr_merge","commitsCount":5,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17362 from ycliuhw/fix-secret-ci\n\nhttps://github.com/juju/juju/pull/17362\n\nThis PR fixes two bugs, and a few secret-related bash test fixes:\n\n- fix UpdateUserSecret secret service method to support for updating secret metadata (config autoprune for example);\n- convert the secreterrors.SecretAccessScopeNotFound to apiservererrors.ErrPerm in GetSecretAccessScope facade method because the existing client side does not handle this error and also the permission denied error makes more sense for users.\n\nAfter this PR landed, below test should be fixed:\n- test-secrets_iaas-test-secrets-cmr-lxd\n- test-secrets_iaas-test-secrets-juju-lxd\n- test-secrets_iaas-test-secrets-vault-lxd\n- test-secrets_k8s-test-user-secrets-microk8s","shortMessageHtmlLink":"Merge pull request #17362 from ycliuhw/fix-secret-ci"}},{"before":"4fb706d348f03b2a6605a410188e7d26d527f2c9","after":"6cfce0ff80925c31d7b3bceaf9182f5dd2af281e","ref":"refs/heads/main","pushedAt":"2024-05-09T14:49:39.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17342 from SimonRichardson/improve-changestream-prunner-log-output\n\nhttps://github.com/juju/juju/pull/17342\n\nThe changestream pruner will log out if the changestream isn't keeping up with all the terms in the changestream. Unfortunately, if there aren't any writes going to the changestream it will still message out that it isn't keeping up. This isn't actually true. There just isn't enough changes being added to the changestream for the log message to be useful. Refactoring it to only log out if the window of changes has moved will then surface the real log messages.\n\n\n\n## Checklist\n\n\n\n- [x] Code style: imports ordered, good names, simple structure, etc\n- [x] Comments saying why design decisions were made\n- [x] Go unit tests, with comments saying what you're testing\n\n## QA steps\n\n```sh\n$ juju bootstrap lxd test\n$ juju debug-log -m controller\n```\n\nThe warning log messages should no longer be emitted.\n\n\n## Links\n\n**Jira card:** JUJU-","shortMessageHtmlLink":"Merge pull request #17342 from SimonRichardson/improve-changestream-p…"}},{"before":"9a1997273403dcc7dee0c93aaba6c7e74f35257d","after":"4fb706d348f03b2a6605a410188e7d26d527f2c9","ref":"refs/heads/main","pushedAt":"2024-05-09T10:35:42.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jujubot","name":"Juju bot","path":"/jujubot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7779494?s=80&v=4"},"commit":{"message":"Merge pull request #17351 from SimonRichardson/context-aware-simple-worker\n\nhttps://github.com/juju/juju/pull/17351\n\nAll our workers are becoming context compatible. This is because all requests from a worker to a domain (database) need the concept of a cancelation (completion or timeout or deadline). Moving simple worker to context pushes the needle in the right direction.\n\n\n\n## Checklist\n\n\n\n- [x] Code style: imports ordered, good names, simple structure, etc\n- [x] Comments saying why design decisions were made\n- [x] Go unit tests, with comments saying what you're testing\n\n## QA steps\n\n```sh\n$ juju bootstrap lxd test\n$ juju add-model default\n$ juju deploy ubuntu\n$ juju destroy-model default\n```\n\nThere should be no errors when destroying a model, as the undertaker should have cleaned things nicely.\n\n## Links\n\n\n**Jira card:** JUJU-","shortMessageHtmlLink":"Merge pull request #17351 from SimonRichardson/context-aware-simple-w…"}},{"before":"28d511fab527b682af1ba6948ab5cd2f90c62a77","after":null,"ref":"refs/heads/increment-to-3.5.1","pushedAt":"2024-05-09T05:37:29.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"hpidcock","name":"Harry Pidcock","path":"/hpidcock","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4424127?s=80&v=4"}},{"before":"542c51f5483c113d3f478b8ae3b10089fd994dea","after":null,"ref":"refs/heads/increment-to-3.5-rc2","pushedAt":"2024-05-09T05:37:27.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"hpidcock","name":"Harry Pidcock","path":"/hpidcock","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4424127?s=80&v=4"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAETBhBPAA","startCursor":null,"endCursor":null}},"title":"Activity · juju/juju"}