0%

【文章翻譯】Screenshots and automated publishing for pub.dev

【文章內容使用 Gemini 1.5 Pro 自動翻譯產生】

pub.dev 的螢幕截圖和自動發佈功能

從今天開始,pub.dev 上有一些新功能:您現在可以為套件宣告螢幕截圖,讓搜尋方式更具視覺化。而且現在發佈流程可以完全自動化,由 GitHub Actions 支援。

將螢幕截圖加入 pub.dev

pub.dev 的核心目標之一是讓開發者更容易找到適合特定用途的套件。當您搜尋 Widget 或其他視覺元件時,圖片扮演著重要的角色。我們現在在套件搜尋結果中顯示螢幕截圖,讓您更容易找到套件。

套件搜尋和套件頁面中的螢幕截圖

螢幕截圖的縮圖現在會顯示在搜尋結果中,您也可以篩選搜尋結果,僅列出包含螢幕截圖的套件。

螢幕截圖縮圖也會顯示在套件頁面上,點擊縮圖會觸發包含所有螢幕截圖的圖片輪播。

pubspec.yaml 中宣告螢幕截圖

將螢幕截圖加入到套件非常簡單。在 pubspec.yamlscreenshots 欄位中宣告檔案,並附上描述和路徑。以下是 animations 套件的範例。

1
2
3
4
5
6
7
8
name: animations
...
screenshots:
- description: '容器轉換模式的範例。'
path: example/screenshots/container_transform_lineup.webp
- description: '淡入淡出模式的範例。'
path: example/screenshots/fade_lineup.webp
...

更多詳細資訊,請參閱 dart.dev/tools/pub/pubspec#screenshots

pub.dev 的自動發佈

數千名 Dart 社群成員在 pub.dev 上發佈套件,造福所有 Dart 和 Flutter 開發者。傳統上,這些套件發佈者透過運行本地終端機命令 dart pub publish 並使用他們的 Google 帳戶進行驗證來發佈到 pub.dev。在幕後,refresh token 會儲存在他們開發機器上的設定檔中,讓他們無需再次驗證即可發佈新版本。這個流程簡單易懂,但需要許多手動步驟。我們很高興推出新的自動發佈流程,可以直接從 GitHub Action 發佈新的 pub.dev 版本。這有幾個好處:

  • 每個版本都會在 GitHub 中自動標記一致的版本標籤
  • 設定審查和批准新版本發佈的流程變得更容易。
  • 發佈過程由 GitHub 簽名的 token 進行驗證,確保沒有憑證需要儲存在磁碟上。

確保自動發佈的安全性

目前,一些使用者已採用將包含 refresh tokenpub-credentials.json 設定檔儲存在 GitHub Actions 上的秘密環境變數中的方法。透過這種方式,他們可以編寫一個 GitHub Action 工作流程,恢復設定檔並使用它來發佈套件的新版本。雖然這種流程在技術上可行,但工具設計時並未考慮到這一點,而且該流程有多個缺點:

  • pub-credentials.json 檔案可以用於發佈作者有權發佈的任何套件,而不僅僅是從設定的流程發佈的一個套件。
  • 如果洩露,pub-credentials.json 可以用於發佈新版本和新套件,偽裝成建立 pub-credentials.json 檔案的使用者。
  • pub-credentials.json撤銷 refresh token 的使用者介面 並不容易找到。

事實上,不止一次發生過套件發佈時意外包含了作者的 pub-credentials.json 檔案的情況,因為作者在 CI 作業中提取了檔案。發佈套件以及更新套件所需的憑證是一個非常嚴重的安全漏洞,我們最終在 dart pub publish實作了洩露偵測

我們新的自動發佈支援減輕了這些問題,可以使用以下其中一種方法驗證到 pub.dev:

  • 由 Github Actions 簽名的臨時 OIDC token
  • 可以從大多數 GCP 資源(如 Google Cloud Build 或其他雲端環境,例如 Azure 或 AWS)使用的 GCP 服務帳戶。

這些流程啟用了依賴長期秘密 token 的自動發佈,如果意外洩露,這些 token 很容易被濫用。如果您將發佈流程部署到自訂機器上,您當然可以依賴匯出的服務帳戶金鑰,但必須非常小心地妥善保護這些金鑰。

啟用安全發佈

只需幾個步驟,您就可以從 GitHub 啟用自動發佈 - 有關所有詳細資訊,請參閱 dart.dev/go/automated-publishing


pub.dev 的螢幕截圖和自動發佈 最初發佈在 Medium 的 Dart 上,人們在那裡透過醒目顯示和回應這個故事來繼續對話。

http://creativecommons.org/licenses/by/4.0/