这周,我对 Starchart 做了一些维护工作。该项目已经有一段时间没有工作了,所以我们正在尝试更新它的依赖项。
Starchart 使 Seneca 开发者社区可以轻松创建和管理自己的自定义子域和 SSL 证书,无需付费或无需提供个人信息。
有关运行 Starchart 的信息,请参阅我们的部署指南。有关开发信息,请参阅我们的贡献指南。有关更多技术背景、规划和初始设计,请参阅 wiki。
互联网正在不断发展,曾经困难的事情变得简单。例如,托管自己的网站过去需要服务器管理、操作系统、网络等方面的知识。如今,许多开发人员托管他们的个人和项目网站而无需接触远程服务器,而是选择(免费)云服务,例如 GitHub Pages、 Vercel、Netlify 或 AWS。
互联网的安全模型也在不断发展。例如,浏览器供应商已在各地采用 HTTPS。这对于安全性很有好处,因为它可以在客户端和服务器之间实现基于证书的加密。然而,就像……
计划是修复 CI 工作流程,我们上周发现该工作流程已被破坏:
但在我找到解决方案之前,之前的开发人员之一 Eakam 解决了这个问题 - 事实证明这只是因为 Playwright 已经过时了。
Playwright 安装在 CI(E2E 测试)中失败。修改剧作家版本应该可以解决这个问题。
参考:
我觉得我应该通过寻找更多的东西来弥补它,并认为更新更多的依赖项将是一个很好的起点。
由于该项目已经两年没有投入使用,因此存在大量由过时的软件包引起的安全漏洞。我能够通过 npm 审核修复修复大部分问题。
还有一些修复导致了 @remix-run/eslint-config 和 @remix-run/react 中的重大更改,所以我手动修改了它们。
其中一个更新(我同时更新了它们,所以我不能肯定地说,但我的赌注是 /react)导致了类型检查错误,因为 [@remix-run/react].useNavigation( ).formData 现在可能是未定义的类型。我用可选链修复了它。
// Before const isLoading = navigation.state === 'submitting' && Number(navigation.formData.get('id')) === dnsRecord.id; // After const isLoading = navigation.state === 'submitting' && Number(navigation.formData?.get('id')) === dnsRecord.id;
我所做的其他更改与弹出的一些 lint 错误有关(此时我意识到我已经关闭了 ESLint 扩展,但我确信这些警告会随更新一起出现,因为它在 CI 中从未发生过)过去)。
// Before import { getCertificateByUsername } from '~/models/certificate.server'; import { deleteCertificateById } from '~/models/certificate.server'; import { isAdmin } from '~/models/user.server'; import { getUserByUsername } from '~/models/user.server'; // After import { getCertificateByUsername, deleteCertificateById } from '~/models/certificate.server'; import { isAdmin, getUserByUsername } from '~/models/user.server';
// Before let date = val.toLocaleDateString('en-US', { // After const date = val.toLocaleDateString('en-US', {
很惊讶它之前没有捕捉到这些。
此外,当我打开 ESLint 扩展时,我有点吃惊,因为有大约 900 个 linter 错误。事实证明,这是因为 ESLint 对 Playwright 生成的输出进行了 linting。所以我将 /playwright-report 添加到 .eslintignore。
这就是我本次冲刺的维护工作的总和。最终修复了 30 个严重的安全问题,所以还不错。
应该修复一堆安全漏洞。
我还重新激活了 Dependabot,它更新了几个小版本。如果不必手动调查和修补安全漏洞,那就太好了。
在其他新闻中,我向 Mattermost 发出的一个拉取请求终于被合并了!
此公关:
修复#29548
// Before const isLoading = navigation.state === 'submitting' && Number(navigation.formData.get('id')) === dnsRecord.id; // After const isLoading = navigation.state === 'submitting' && Number(navigation.formData?.get('id')) === dnsRecord.id;
不久前就已获得批准,但花了几周时间才合并到 main 中。
与此同时,我一直在致力于我的其他公关工作。我被要求进行一些更改,正在等待重新审核。
此拉取请求向 Web 应用程序添加了一个用户设置,以将渲染表情符号 (:D) 切换为表情符号 (?)。
该设置作为组件添加到 Components/user_settings/display/render_emoticons_as_emoji/ 中,并在 Components/user_settings/display/user_settings_display.tsx 中导入。
我在 user_settings_display.tsx 中添加了一个 renderOnOffLabel() 函数,该函数从 Components/user_settings/advanced/user_settings_advanced.tsx 中提取,以帮助渲染新组件。
使用 savePreferences() 操作将设置存储为用户首选项。
我已经为 utils/constants.tsx 和 webapp/channels/src/packages/mattermost-redux/src/constants/preferences.ts 添加了偏好常量。
为了实际使用该设置,我修改了 Components/post_markdown 以接收它的值作为道具,为此我使用了 getBool() 并向配置添加了默认值。 post_markdown 将此值传递给选项对象上的 Markdown,然后将其传递给 utils/text_formatting.tsx,最后将该值作为新添加的参数传递给 emoticons.tsx。 emoticons.tsx 检查该值是否为 true,如果是,则将表情符号转换为表情符号。
我已经更新了受影响的测试并为新组件创建了单元测试。我还更新了英文翻译文件。
修复(部分)https://github.com/mattermost/mattermost/issues/26504 Jira https://mattermost.atlassian.net/browse/MM-53650
注意问题和票证也描述了将此功能添加到移动应用程序中,但此 PR 没有。
before | after |
---|---|
// Before const isLoading = navigation.state === 'submitting' && Number(navigation.formData.get('id')) === dnsRecord.id; // After const isLoading = navigation.state === 'submitting' && Number(navigation.formData?.get('id')) === dnsRecord.id;
处理这个 PR 很有趣,因为当我第一次提交它时,我什至不完全理解我的更改。离开很长一段时间后重新回到它并得到评论的反馈帮助我从一个新的角度看待它并更好地理解它。
Mattermost 应用程序从“首选项”和“配置”获取用户设置状态。我将我的设置添加到两者中,模仿建议我参考的现有设置之一,但事实证明“配置”用于服务器级设置,而这个新设置旨在成为客户端选项。这些评论帮助我了解了我哪里出错了,而且实际上最终的改变比我认为必要的要小。
总的来说,我想说这是相当富有成效的一周。
以上是恢复过时的项目的详细内容。更多信息请关注PHP中文网其他相关文章!