发布 LeakCanary¶
准备发布环境¶
设置你的 Sonatype OSSRH 账户¶
- 创建一个 Sonatype OSSRH JIRA 账户。
- 创建一个工单以请求访问
com.squareup.leakcanary
项目。这里有一个示例:OSSRH-54959。 - 然后请 LeakCanary 团队中具有部署者角色的人员确认访问权限。
设置你的签名密钥¶
# Create a new key
gpg --gen-key
# List local keys. Key id is last 8 characters
gpg -K
cd ~/.gnupg
# Export key locally
gpg --export-secret-keys -o secring.gpg
# Upload key to Ubuntu servers
gpg --send-keys --keyserver keyserver.ubuntu.com <KEY ID>
# Confirm the key can now be found
gpg --recv-keys --keyserver keyserver.ubuntu.com <KEY ID>
设置你的 home gradle.properties¶
将此添加到你的 ~/.gradle/gradle.properties
signing.keyId=<KEY ID>
signing.password=<KEY PASSWORD>
signing.secretKeyRingFile=/Users/YOUR_USERNAME_/.gnupg/secring.gpg
SONATYPE_NEXUS_USERNAME=<SONATYPE_USERNAME>
SONATYPE_NEXUS_PASSWORD=<SONATYPE_PASSWORD>
设置 Google Analytics 文档密钥¶
将此添加到你的 ~/.bashrc
export LEAKCANARY_GOOGLE_ANALYTICS_KEY="UA-142834539-1"
设置 GitHub CLI¶
安装 GitHub CLI
brew install gh
安装 jq,一个 CLI Json 处理器
brew install jq
设置用于里程碑管理的别名
gh alias set listOpenMilestones "api graphql -F owner=':owner' -F name=':repo' -f query='
query ListOpenMilestones(\$name: String\!, \$owner: String\!) {
repository(owner: \$owner, name: \$name) {
milestones(first: 100, states: OPEN) {
nodes {
title
number
description
dueOn
url
state
closed
closedAt
updatedAt
}
}
}
}
'"
gh alias set --shell createMilestone "gh api --method POST repos/:owner/:repo/milestones --input - | jq '{ html_url: .html_url, state: .state, created_at: .created_at }'"
gh alias set --shell closeMilestone "echo '{\"state\": \"closed\"}' | gh api --method PATCH repos/:owner/:repo/milestones/\$1 --input - | jq '{ html_url: .html_url, state: .state, closed_at: .closed_at }'"
安装或更新文档生成依赖项¶
python3 -m venv venv
source venv/bin/activate
pip3 install --requirement docs/requirements.txt
发布¶
-
从
main
创建一个本地发布分支git checkout main && \ git pull && \ git checkout -b release_3.0-alpha-9
-
更新
gradle.properties
中的VERSION_NAME
(移除-SNAPSHOT
)sed -i '' 's/VERSION_NAME=3.0-alpha-9-SNAPSHOT/VERSION_NAME=3.0-alpha-9/' gradle.properties
-
更新
mkdocs.yml
中的当前版本和下一个版本sed -i '' 's/3.0-alpha-9/NEXT/' mkdocs.yml sed -i '' 's/2.14/3.0-alpha-9/' mkdocs.yml
-
创建发布
git commit -am "Prepare 3.0-alpha-9 release" && \ ./gradlew clean && \ ./gradlew build && \ git tag v3.0-alpha-9 && \ git push origin v3.0-alpha-9 && \ ./gradlew publish --no-daemon --no-parallel && \ ./gradlew closeAndReleaseRepository && \ ./gradlew shark:shark-cli:distZip
注意:如果出现任何问题,你可以在 https://s01.oss.sonatype.org/ 手动取消发布
- 合并回 main
git checkout main && \ git pull && \ git merge --no-ff release_3.0-alpha-9
-
更新
gradle.properties
中的VERSION_NAME
(增加版本并添加-SNAPSHOT
)sed -i '' 's/VERSION_NAME=3.0-alpha-9/VERSION_NAME=NEXT-SNAPSHOT/' gradle.properties
-
生成 Dokka 文档
rm -rf docs/api && ./gradlew siteDokka
-
更新变更日志(提交列表)
mate docs/changelog.md
-
在本地部署文档,然后打开变更日志并检查一切是否正常
source venv/bin/activate && \ mkdocs serve
-
完成发布
git commit -am "Prepare for next development iteration" && \
git push && \
source venv/bin/activate && \
mkdocs gh-deploy && \
gh release create v3.0-alpha-9 ./shark/shark-cli/build/distributions/shark-cli-3.0-alpha-9.zip --title v3.0-alpha-9 --notes 'See [Change Log](https://square.ac.cn/leakcanary/changelog)' && \
gh listOpenMilestones | jq '.data.repository.milestones.nodes[0].number' | xargs gh closeMilestone && \
echo '{
"title": "REPLACE_WITH_NEXT_VERSION_NUMBER",
"state": "open",
"description": ""
}' | gh createMilestone
-
打开 v3.0-alpha-9 版本以确认一切正常。
-
将 shark-cli 上传到 brew
brew bump-formula-pr --url https://github.com/square/leakcanary/releases/download/v3.0-alpha-9/shark-cli-3.0-alpha-9.zip leakcanary-shark
-
等待发布在 Maven Central 上可用。
- 告诉你的朋友,更新你的所有应用,并发推文宣传新版本。作为一个额外的小细节,提及外部贡献。