如何最好地处理 GitHub Actions Workflow 中的长条件表达式?
我有一个工作流程,我想在两种情况下运行:
这导致工作流定义具有长if
表达式:
on:
pull_request:
types: [ closed ]
issue_comment:
types: [ created ]
jobs:
do:
if: ${{ github.event_name == 'pull_request' || (github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, 'specific string')) }}
steps:
...
Run Code Online (Sandbox Code Playgroud)
我看到的一个解决方案是将工作流程分成 2 个定义,但由于 DRY,我想避免这种情况。
我搜索了一些想法,但没有找到以下可行的解决方案:
当我的 HttpServlet 抛出 ServletException 时,Tomcat 会记录一条包含堆栈跟踪的 SEVERE 消息,尽管它已正确重定向到 web.xml 中的另一个 HttpServlet。
\nTomcat 使用 stacktrace 记录以下消息:
\n21-Mar-2015 15:24:57.521 SEVERE [http-nio-8080-exec-28] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [MyHttpServlet] in context with path [/HttpServletExceptionHandler] threw exception [CustomException] with root cause CustomException\nat MyHttpServlet.doGet(MyHttpServlet.java:20)\nat javax.servlet.http.HttpServlet.service(HttpServlet.java:618)\nat javax.servlet.http.HttpServlet.service(HttpServlet.java:725)\nat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)\nat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)\nat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)\nat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)\nat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)\nat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)\nat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)\nat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)\nat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)\nat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)\nat org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)\nat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)\nat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)\nat org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086)\nat org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)\nat org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)\nat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)\nat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)\nat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\nat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\nat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\nat java.lang.Thread.run(Thread.java:745)\n
Run Code Online (Sandbox Code Playgroud)\n首先,MyHttpServlet 抛出一个 ServletException,在它的 doGet() 方法中包装了一个 CustomException(Exception 的子类):
\npublic class MyHttpServlet extends …
Run Code Online (Sandbox Code Playgroud) 我经常听说提交消息应该描述我进行这些更改的原因。我想我同意这一点。然而,我也经常听说内联注释(即源代码中的注释)应该说明代码为什么以这种特定方式工作,而不是它的作用。
那么,什么时候应该将推理放入提交消息中,什么时候应该将其写在内联注释中呢?是否有一些可以应用的经验法则或最佳实践?