這週,我對 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中文網其他相關文章!