{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":46251204,"defaultBranch":"main","name":"armeria","ownerLogin":"line","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2015-11-16T04:04:01.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/13128444?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1716168779.0","currentOid":""},"activityList":{"items":[{"before":"1fa54422de0fec643b05944d0239a947b5299239","after":"24140998343844c7657a699c44ddfbb3ab31f8f7","ref":"refs/heads/main","pushedAt":"2024-05-24T04:21:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Fix flaky tests (#5694)\n\nClose #5681 \r\nClose #4553","shortMessageHtmlLink":"Fix flaky tests (#5694)"}},{"before":"2a0dba1595796f53bc06284d509add56442c5eaf","after":"1fa54422de0fec643b05944d0239a947b5299239","ref":"refs/heads/main","pushedAt":"2024-05-23T02:21:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"update check-style setting for LY corp copyright (#5678)\n\nMotivation:\r\nIn the latest developer guide, it is recommended to use `Copyright $today.year LY Corporation`, but the check-style settings have not been adapted accordingly. When this copyright notice is used, a check-style warning occurs.\r\nModifications:\r\n\r\n- Updated check-style setting for LY corp copyright\r\n\r\nResult:\r\n\r\n- Using either LINE copyright or LY copyright will pass the check-style test.\r\n\r\n","shortMessageHtmlLink":"update check-style setting for LY corp copyright (#5678)"}},{"before":"f72333be566bad0928ff941eb1cf12a6e3a489f0","after":"2a0dba1595796f53bc06284d509add56442c5eaf","ref":"refs/heads/main","pushedAt":"2024-05-23T02:18:38.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Fix asJson method to pass mapper in WebClientRequestPreparation (#5512)\n\nMotivation:\r\n\r\nResolve issue #5454 with proper handling of ObjectMapper instance.\r\n\r\nModifications:\r\n\r\n- Pass the provided ObjectMapper to the ResponseAs.json method:\r\n `WebClientRequestPreparation.asJson(Class clazz, ObjectMapper mapper)`.\r\n\r\nResult:\r\n\r\n- The `asJson` method pass the provided ObjectMapper instance to the `ResponseAs.json` method as it should\r\n- Closes #5454","shortMessageHtmlLink":"Fix asJson method to pass mapper in WebClientRequestPreparation (#5512)"}},{"before":"a68b5f9c223dd84fe19cebc6176ebc0b954b9e48","after":"f72333be566bad0928ff941eb1cf12a6e3a489f0","ref":"refs/heads/main","pushedAt":"2024-05-22T10:30:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Fix flaky test in Http1ServerDelayedCloseConnectionTest (#5691)","shortMessageHtmlLink":"Fix flaky test in Http1ServerDelayedCloseConnectionTest (#5691)"}},{"before":"806556e5a4d27b549c4c6c24f75d96a1447d85d1","after":"a68b5f9c223dd84fe19cebc6176ebc0b954b9e48","ref":"refs/heads/main","pushedAt":"2024-05-22T10:29:38.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Add headers and MediaTypes for Git HTTP (#5689)\n\nMotivation:\r\nAdded necessary headers and MediaTypes for Git HTTP, as a follow-up to https://github.com/line/centraldogma/pull/954.","shortMessageHtmlLink":"Add headers and MediaTypes for Git HTTP (#5689)"}},{"before":"1e1439664309f457458517c42dd38e201e98cad7","after":"806556e5a4d27b549c4c6c24f75d96a1447d85d1","ref":"refs/heads/main","pushedAt":"2024-05-20T09:18:10.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Refactor messageContext initialization for enhanced scope availability in SamlAssertionConsumerFunction (#5622)\n\nMotivation:\r\n\r\nThis PR addresses a code enhancement in the SamlAssertionConsumerFunction by initializing the messageContext variable at the beginning of the method. This change is intended to streamline the assignment and handling of messageContext, ensuring that it can be consistently used throughout the method, particularly in exception handling scenarios.\r\n\r\nModifications:\r\n\r\nDeclared messageContext at the method start to allow its use across the entire method scope, including within try and catch blocks.\r\n\r\nResult:\r\n\r\n- Closes #5401 \r\n- The refactor ensures messageContext is available for error handling.","shortMessageHtmlLink":"Refactor messageContext initialization for enhanced scope availabilit…"}},{"before":"a7f7e3c2d7f02bfc9b9cc9fcf93f7f195aeb4414","after":"1e1439664309f457458517c42dd38e201e98cad7","ref":"refs/heads/main","pushedAt":"2024-05-20T08:12:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Refactor GrpcStatus to implement GrpcExceptionHandlerFunction (#5571)\n\nMotivation:\r\n\r\n- Closes #5550 \r\n\r\nModifications:\r\n\r\n- `GrpcStatus` implements `GrpcExceptionHandlerFunction`\r\n- Rename `GrpcStatus` to `DefaultGrpcExceptionHandlerFunction`\r\n\r\nResult:\r\n\r\n- Closes #5550\r\n- GrpcClientBuilder uses `DefaultGrpcExceptionHandlerFunction` as default\r\n- GrpcService can use `DefaultGrpcExceptionHandlerFunction` for its `exceptionHandler`\r\n\r\n","shortMessageHtmlLink":"Refactor GrpcStatus to implement GrpcExceptionHandlerFunction (#5571)"}},{"before":"0eae6266939cb0077a9f1c065597624065dee5cf","after":"a7f7e3c2d7f02bfc9b9cc9fcf93f7f195aeb4414","ref":"refs/heads/main","pushedAt":"2024-05-20T08:10:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Add feature to gracefully shutdown connections in HttpClientFactory (#5489)\n\nMotivation:\r\n\r\nAdd graceful shutdown feature in `HttpClientFactory`. The implementation has been referenced from the server side graceful shutdown. \r\n\r\nModifications:\r\n\r\n- Add `clientConnectionDrainDurationMillis` which is used to set client-side drain settings \r\n- When `drainDurationMillis > 0` in `HttpClientFactory`, graceful shutdown is applied. \r\n\r\nResult:\r\n\r\n- Closes #<[5470](https://github.com/line/armeria/issues/5470)>. (If this resolves the issue.)\r\n- By allowing a grace period for ongoing requests to finish before closing connections, users can ensure that their requests complete\r\n\r\nCo-authored-by: minwoox ","shortMessageHtmlLink":"Add feature to gracefully shutdown connections in HttpClientFactory (#…"}},{"before":"8ab42847c146b481c72f000dbc1c4d77dc009220","after":"0eae6266939cb0077a9f1c065597624065dee5cf","ref":"refs/heads/main","pushedAt":"2024-05-20T07:44:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Collect timings related with TLS handshake (#5647)\n\nMotivation:\r\n\r\nCollect the timings related with TLS handshake. If a request was the first in a connection, armeria could also provide it in a RequestLog to tell a user that the request timing has been affected by TLS handshake.\r\n\r\nModifications:\r\n\r\n- Add TLS handshake related field in `ClientConnectionTimings`\r\n- Add TLS handshake duration metric field at MetricCollectingClient\r\n- Start collecting the TLS handshake timer in the case below.\r\n - ~~If the client is enabled as `TCP fast open` in the first request, start the timer before the TCP connection.~~\r\n - start the timer when netty calls `SslHandler.channelActive()`\r\n\r\nResult:\r\n\r\n- Closes #3647","shortMessageHtmlLink":"Collect timings related with TLS handshake (#5647)"}},{"before":null,"after":"36576052f11d0b2d0bd9f2e9b574daef0e43d93b","ref":"refs/heads/dependabot/gradle/com.gradle.develocity-3.17.4","pushedAt":"2024-05-20T01:32:59.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump com.gradle.develocity from 3.17.3 to 3.17.4\n\nBumps com.gradle.develocity from 3.17.3 to 3.17.4.\n\n---\nupdated-dependencies:\n- dependency-name: com.gradle.develocity\n dependency-type: direct:production\n update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump com.gradle.develocity from 3.17.3 to 3.17.4"}},{"before":"1737482b82255d2ff4728927bdf91631bf1b23e9","after":"8ab42847c146b481c72f000dbc1c4d77dc009220","ref":"refs/heads/main","pushedAt":"2024-05-16T07:28:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Add option to respect the marshaller specified in gRPC MethodDescriptor (#5630)\n\nMotivation:\r\n\r\n- This PR adds option to use marshaller that specified in gRPC `MethodDescriptor`\r\n- Related Issue #5103\r\n - Partial solved: Option to use marshaller that specified in gRPC `MethodDescriptor`\r\n - Unsolved part: Provide way to add custom marshaller\r\n\r\nModifications:\r\n\r\n- New option `useMethodMarshaller`\r\n - default value is `false`\r\n- Add validate logic for `GrpcServiceBuilder` and `GrpcClientBuilder` to check that `unsafeWrapDeserializedBuffer` and `useMethodMarshaller` are mutually exclusive\r\n\r\nResult:\r\n- Have new option `useMethodMarshaller`\r\n- Throw `IllegalStateException` when both `unsafeWrapDeserializedBuffer` and `useMethodMarshaller` are enabled\r\n","shortMessageHtmlLink":"Add option to respect the marshaller specified in gRPC MethodDescript…"}},{"before":"b6ac745d027753acfb205500ac6fadaa9e58179c","after":null,"ref":"refs/heads/update-public-suffixes","pushedAt":"2024-05-13T10:07:05.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"}},{"before":"450d5d55a84da6315679db5249a348748c3cbc45","after":"1737482b82255d2ff4728927bdf91631bf1b23e9","ref":"refs/heads/main","pushedAt":"2024-05-13T10:07:04.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Update public suffix list (#5675)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: Meri Kim ","shortMessageHtmlLink":"Update public suffix list (#5675)"}},{"before":null,"after":"b6ac745d027753acfb205500ac6fadaa9e58179c","ref":"refs/heads/update-public-suffixes","pushedAt":"2024-05-13T10:06:28.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Update public suffix list","shortMessageHtmlLink":"Update public suffix list"}},{"before":"6eccf5268c5463871704cc615894ab5c621479d9","after":"450d5d55a84da6315679db5249a348748c3cbc45","ref":"refs/heads/main","pushedAt":"2024-05-13T04:15:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Inject CORS headers even when server-side errors occur (#5632)\n\nMotivation:\r\n\r\nThere is an issue where CORS headers are not added when exceptions occur while using CorsService. \r\n[CorsService does not inject CORS headers into error responses](https://github.com/line/armeria/issues/5493)\r\n\r\nModifications:\r\n\r\nCreated CorsServerErrorHandler to inject CORS headers upon exceptions. Created CorsHeaderUtil and refactored CorsService, CorsPolicy.\r\n\r\nResult:\r\n\r\nCORS headers will be added to response headers when an exception is raised.\r\nCo-authored-by: Trustin Lee \r\nCo-authored-by: minwoox ","shortMessageHtmlLink":"Inject CORS headers even when server-side errors occur (#5632)"}},{"before":"692159647c531314f2843e08e804a324e205876b","after":null,"ref":"refs/heads/dependabot/gradle/com.gradle.develocity-3.17.3","pushedAt":"2024-05-13T04:09:42.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"jrhee17","name":"jrhee17","path":"/jrhee17","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8510579?s=80&v=4"}},{"before":"8a94bcc1af767cd6abb4e67897e2c4a1144bd744","after":"6eccf5268c5463871704cc615894ab5c621479d9","ref":"refs/heads/main","pushedAt":"2024-05-13T04:09:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jrhee17","name":"jrhee17","path":"/jrhee17","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8510579?s=80&v=4"},"commit":{"message":"Bump com.gradle.develocity from 3.17.2 to 3.17.3 (#5674)\n\nBumps com.gradle.develocity from 3.17.2 to 3.17.3.\r\n\r\n\r\n[![Dependabot compatibility\r\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.gradle.develocity&package-manager=gradle&previous-version=3.17.2&new-version=3.17.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\r\n\r\nDependabot will resolve any conflicts with this PR as long as you don't\r\nalter it yourself. You can also trigger a rebase manually by commenting\r\n`@dependabot rebase`.\r\n\r\n[//]: # (dependabot-automerge-start)\r\n[//]: # (dependabot-automerge-end)\r\n\r\n---\r\n\r\n
\r\nDependabot commands and options\r\n
\r\n\r\nYou can trigger Dependabot actions by commenting on this PR:\r\n- `@dependabot rebase` will rebase this PR\r\n- `@dependabot recreate` will recreate this PR, overwriting any edits\r\nthat have been made to it\r\n- `@dependabot merge` will merge this PR after your CI passes on it\r\n- `@dependabot squash and merge` will squash and merge this PR after\r\nyour CI passes on it\r\n- `@dependabot cancel merge` will cancel a previously requested merge\r\nand block automerging\r\n- `@dependabot reopen` will reopen this PR if it is closed\r\n- `@dependabot close` will close this PR and stop Dependabot recreating\r\nit. You can achieve the same result by closing it manually\r\n- `@dependabot show ignore conditions` will show all\r\nof the ignore conditions of the specified dependency\r\n- `@dependabot ignore this major version` will close this PR and stop\r\nDependabot creating any more for this major version (unless you reopen\r\nthe PR or upgrade to it yourself)\r\n- `@dependabot ignore this minor version` will close this PR and stop\r\nDependabot creating any more for this minor version (unless you reopen\r\nthe PR or upgrade to it yourself)\r\n- `@dependabot ignore this dependency` will close this PR and stop\r\nDependabot creating any more for this dependency (unless you reopen the\r\nPR or upgrade to it yourself)\r\n\r\n\r\n
\r\n\r\nSigned-off-by: dependabot[bot] \r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>","shortMessageHtmlLink":"Bump com.gradle.develocity from 3.17.2 to 3.17.3 (#5674)"}},{"before":"14c55669d063cd264459bb405d06a32c08030866","after":"8a94bcc1af767cd6abb4e67897e2c4a1144bd744","ref":"refs/heads/main","pushedAt":"2024-05-13T04:07:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jrhee17","name":"jrhee17","path":"/jrhee17","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8510579?s=80&v=4"},"commit":{"message":"Support verb suffix for HTTP endpoint (#5613)\n\nMotivation:\r\n\r\nWe didn't implement supporting \"verb\" part from #3786, for example,\r\n`customVerb` from\r\n`https://service.name/v1/some/resource/name:customVerb`.\r\n\r\n`:` is a control character of a parameter variable in `RoutingTrie`,\r\nso there's no way to specify a plain `:` character on a service path.\r\n\r\nThis changeset if a follow-up of #4064, originally written by\r\n@hyangtack.\r\n\r\nModifications:\r\n\r\n- Add `VerbSuffixPathMapping` which checks whether the request path has\r\na verb or not.\r\n- Fix `HttpJsonTranscodingPathParser.Stringifier` to produce a verb with\r\na leading `:` character.\r\n- Make `RoutingTrie` handle a escape character `\\`.\r\n- Add an explanation about the verb suffix in Armeria documentation.\r\n\r\nResult:\r\n\r\n- A user can specify a verb on HTTP endpoint.\r\n\r\nCo-authored-by: Hyangtack Lee ","shortMessageHtmlLink":"Support verb suffix for HTTP endpoint (#5613)"}},{"before":null,"after":"692159647c531314f2843e08e804a324e205876b","ref":"refs/heads/dependabot/gradle/com.gradle.develocity-3.17.3","pushedAt":"2024-05-13T01:48:22.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump com.gradle.develocity from 3.17.2 to 3.17.3\n\nBumps com.gradle.develocity from 3.17.2 to 3.17.3.\n\n---\nupdated-dependencies:\n- dependency-name: com.gradle.develocity\n dependency-type: direct:production\n update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump com.gradle.develocity from 3.17.2 to 3.17.3"}},{"before":"af542d46d66c71569ffd18e69d2e52cead725aa8","after":null,"ref":"refs/heads/update-public-suffixes","pushedAt":"2024-05-11T10:06:18.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"}},{"before":"550b9318dad75e5bd1c8ad1f289a311b68984b7d","after":"14c55669d063cd264459bb405d06a32c08030866","ref":"refs/heads/main","pushedAt":"2024-05-11T10:06:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Update public suffix list (#5673)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: Meri Kim ","shortMessageHtmlLink":"Update public suffix list (#5673)"}},{"before":null,"after":"af542d46d66c71569ffd18e69d2e52cead725aa8","ref":"refs/heads/update-public-suffixes","pushedAt":"2024-05-11T10:05:41.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Update public suffix list","shortMessageHtmlLink":"Update public suffix list"}},{"before":"d2176e3b7547c31f04f19e18d6d15210e56e885c","after":"550b9318dad75e5bd1c8ad1f289a311b68984b7d","ref":"refs/heads/main","pushedAt":"2024-05-11T04:06:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trustin","name":"Trustin Lee","path":"/trustin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/173918?s=80&v=4"},"commit":{"message":"Close an HTTP/1.1 connection after delay (#5616)\n\nMotivation:\r\n- Closes https://github.com/line/armeria/issues/4849\r\n- To suppress a server socket from remaining in the `TIME_WAIT` state\r\ninstead of `CLOSED` when a connection is closed.\r\n\r\nModifications:\r\n- Remove the force shutdown mode of `AbstractHttpResponseHandler` that\r\nis activated when a user sets the `Connection: close` HTTP header\r\n- Create a schedule that waits and closes the connection to wait for the\r\nclient-side connection to close, rather than closing the HTTP/1.1\r\nconnection immediately.\r\n\r\nResult:\r\n- Closes https://github.com/line/armeria/issues/4849\r\n- When a user wants to close an HTTP/1.1 server connection, the armeria\r\nserver first waits for the client to close the connection for a while to\r\nmake the connection state to `CLOSED` instead of `TIME_WAIT`.","shortMessageHtmlLink":"Close an HTTP/1.1 connection after delay (#5616)"}},{"before":"ab84bf4ae4f0d6fc14229a02c7dc448366a0ca14","after":"d2176e3b7547c31f04f19e18d6d15210e56e885c","ref":"refs/heads/main","pushedAt":"2024-05-10T13:25:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"[Docs] Omit \"$\" character when copying code (#5334)\n\nMotivation:\r\n\r\nWhen copying code from documentation, \"$\" is copied. It's painful to copy code with \"$\" because users will have to delete the it everytime. \r\n\r\nModifications:\r\n\r\n- Omit the \"$\" when it's a prefix \r\n\r\nResult:\r\n\r\n- Closes #. (If this resolves the issue.)\r\n- Code is copied without \"$\" prefix \r\n\r\n![image](https://github.com/line/armeria/assets/69591622/05261596-d8d1-406e-ac6d-ef5682f72423)","shortMessageHtmlLink":"[Docs] Omit \"$\" character when copying code (#5334)"}},{"before":"cd0e4ba96c76dda0ba792d4260955ac837dd0bbe","after":"ab84bf4ae4f0d6fc14229a02c7dc448366a0ca14","ref":"refs/heads/main","pushedAt":"2024-05-10T06:30:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Fix self-signed certificate generation failure (#5669)\n\nMotivation:\r\n\r\n`SelfSignedCertificate` fails to generate a self-signed certificate and throws a\r\n`NullPointerException` when all of the following conditions are met:\r\n\r\n- DEBUG-level logging of JDK security event is enabled; and\r\n- A user has no Bouncy Castle dependency.\r\n\r\nJDK security event logging and the absence of Bouncy Castle interact with each other in the following way:\r\n\r\n- With logging enabled, JDK tries to retrieve the `PublicKey` for logging via `java.security.cert.Certificate#getPublicKey()`, but it returns `null`.\r\n- `Certificate.getPublicKey()` returns `null` because Armeria internally relies on a minimal version of Bouncy Castle that doesn't have all the necessary algorithms.\r\n\r\nModifications:\r\n\r\n- Updated ProGuard settings so that all the necessary classes are included in the shaded JAR.\r\n- `MinifiedBouncyCastleProvider` is now configured by the `Mappings.configure()` methods, so that all the necessary algorithms are registered as intended by the Bouncy Castle authors.\r\n- Added some protection mechanism and test cases against the potential situation where our shading tool fails to relocate Bouncy Castle properly.\r\n- Made sure `SelfSignedCertificate` has access to all the necessary algorithms required for generating a self-signed certificate.\r\n- Overall clean-up of `MinifiedBouncyCastleProviderTest`\r\n\r\nResult:\r\n\r\n- (defect) A user doesn't get a `NullPointerException` when running Armeria with a self-signed certificate when the following conditions are all met:\r\n - DEBUG-level logging of JDK security event is enabled; and\r\n - A user has no Bouncy Castle dependency.","shortMessageHtmlLink":"Fix self-signed certificate generation failure (#5669)"}},{"before":"4913af1d5eddfba5cdf5122295c8dc789377c0da","after":"cd0e4ba96c76dda0ba792d4260955ac837dd0bbe","ref":"refs/heads/main","pushedAt":"2024-05-10T06:25:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Use Java 21 to build Armeria (+Gradle 8.7 wrapper) (#5667)\n\nMotivation:\r\n\r\nAs non-maintainer users can't update GitHub workflow files, this PR\r\nsupersedes @Dogacel's work (https://github.com/line/armeria/pull/5644)\r\n\r\nModifications:\r\n\r\n- Use JDK 21 to run Armeria CI and other jobs\r\n- Upgrade Gradle wrapper version to 8.7\r\n\r\nResult:\r\n\r\nYou can now use Java 21 to build Armeria\r\n\r\nCo-authored-by: Dogacel ","shortMessageHtmlLink":"Use Java 21 to build Armeria (+Gradle 8.7 wrapper) (#5667)"}},{"before":"43ab0679049041d2fec2e9d9d8f9036ca444ce3f","after":"4913af1d5eddfba5cdf5122295c8dc789377c0da","ref":"refs/heads/main","pushedAt":"2024-05-10T06:20:44.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Call `UnloggedExceptionsReporter.report` after calling `ServiceErrorH… (#5587)\n\n…andler` and rename `UnhandledExceptions` to `UnloggedExceptions`.\r\n\r\nMotivation:\r\nThis PR addresses two main concerns:\r\n1. Currently, `UnloggedExceptionsReporter` reports unlogged exceptions before calling `ServiceErrorHandler.onServiceException`. This order could conflict with user preferences if they want to handle exceptions in `ServiceErrorHandler` and avoid logging them through the reporter.\r\n2. The term `UnhandledExceptions` might be misleading, as the exceptions are indeed handled but not logged. Renaming it to `UnloggedExceptions` provides clarity.\r\n\r\nModifications:\r\n- Adjust the sequence to call `UnloggedExceptionsReporter.report` after invoking `ServiceErrorHandler`.\r\n- Rename `UnhandledExceptions` to `UnloggedExceptions` throughout the codebase.\r\n\r\nResult:\r\n- This change enables users to control whether an exception should be logged by the `UnloggedExceptionsReporter` in a `ServiceErrorHandler` by invoking `ctx.setShouldReportUnloggedExceptions(false)`.\r\n- (deprecation)\r\n - `Flags.defaultUnhandledExceptionsReportIntervalMillis` -> `Flags.defaultUnloggedExceptionsReportIntervalMillis`\r\n - `FlagsProvider.defaultUnhandledExceptionsReportIntervalMillis` -> `FlagsProvider.defaultUnloggedExceptionsReportIntervalMillis`\r\n - `ServerBuilder.unhandledExceptionsReportInterval` -> `ServerBuilder.unloggedExceptionsReportInterval`\r\n - `ServerConfig.unhandledExceptionsReportIntervalMillis` -> `ServerConfig.unloggedExceptionsReportIntervalMillis`\r\n - `ServiceRequestContext.shouldReportUnhandledExceptions` -> `ServiceRequestContext.shouldReportUnloggedExceptions`\r\n - `ServiceRequestContext.setShouldReportUnhandledExceptions` -> `ServiceRequestContext.setShouldReportUnloggedExceptions`","shortMessageHtmlLink":"Call UnloggedExceptionsReporter.report after calling `ServiceErrorH… ("}},{"before":"8ddf422f21b63d644265521100dd6fff0b0cd881","after":"43ab0679049041d2fec2e9d9d8f9036ca444ce3f","ref":"refs/heads/main","pushedAt":"2024-05-10T06:18:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Add CoroutineHttpService for handle request within Coroutine suspend (#5603)\n\nMotivation:\r\n- Closes https://github.com/line/armeria/issues/5442\r\n\r\nModifications:\r\n- Add CoroutineHttpService implements HttpService\r\n\r\nResult:\r\n- Closes #5442.\r\n- You can now use `CoroutineHttpService` that runs your service in a coroutine scope.\r\nCo-authored-by: minwoox ","shortMessageHtmlLink":"Add CoroutineHttpService for handle request within Coroutine suspend (#…"}},{"before":"727ac8003dde3f665b80b17f25c71e48ccb7a340","after":"8ddf422f21b63d644265521100dd6fff0b0cd881","ref":"refs/heads/main","pushedAt":"2024-05-09T17:28:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trustin","name":"Trustin Lee","path":"/trustin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/173918?s=80&v=4"},"commit":{"message":"Build ClientRequestContext with EndpointGroup (#5298)\n\nMotivation:\r\n\r\n`ClientRequestContextBuilder` provides a builder method for an\r\n`Endpoint`, but no method for `EndpointGroup`.\r\n\r\nModifications:\r\n\r\n- Added builder method of `ClientRequestContextBuilder` for an\r\n`EndpointGroup`\r\n\r\nResult:\r\n\r\n- Closes #5292 \r\n- `ClientRequestContextBuilder` now provides a builder method for an\r\n`EndpointGroup`\r\n\r\n---------\r\n\r\nCo-authored-by: Ikhun Um ","shortMessageHtmlLink":"Build ClientRequestContext with EndpointGroup (#5298)"}},{"before":"61bdfe446acb2e4d6f56d21979eb76f020a1ce1d","after":"727ac8003dde3f665b80b17f25c71e48ccb7a340","ref":"refs/heads/main","pushedAt":"2024-05-09T06:12:35.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trustin","name":"Trustin Lee","path":"/trustin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/173918?s=80&v=4"},"commit":{"message":"Implement @Attribute Injection. (#5547)\n\n### Motivation:\r\n- In the past, users could get a value from `ServiceRequestContext` by\r\nusing `ServiceRequestContext.attr(key)`. however, if it were possible to\r\ninject values which in `ServiceRequestContext` into method parameters\r\nusing any annotation, users would be able to use it more conveniently.\r\n\r\n### Modifications:\r\n- New annotation. `@Attribute` is added.\r\n- Make new field `rawType` in `AnnotatedValueResolver` to validate type\r\ncast.\r\n- New methods `ofAttribute()` and `attributeResolver()` are added to\r\n`AnnotatedValueResolver` to get values from `ServiceRequestContext` and\r\ninject them method parameters.\r\n- `findName()` in `AnnotatedElementNameUtil` method have been merged\r\ninto a single method. (refactoring for internal use)\r\n- Add test codes. \r\n- Add document explaining how to use the `@Attribute` annotation.\r\n\r\n### Result:\r\n- Closes https://github.com/line/armeria/issues/5514\r\n- Users can inject values from the `ServiceRequestContext` into method\r\nparameters using the `@Attribute` annotation without\r\n`ServiceRequestContext.attr(key)`.\r\n\r\n---------\r\n\r\nCo-authored-by: Trustin Lee \r\nCo-authored-by: Ikhun Um \r\nCo-authored-by: minux ","shortMessageHtmlLink":"Implement @Attribute Injection. (#5547)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEUqcrJgA","startCursor":null,"endCursor":null}},"title":"Activity · line/armeria"}