跳到内容
🤔 文档问题? 报告编辑

发布 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 上可用。

  • 告诉你的朋友,更新你的所有应用,并发推文宣传新版本。作为一个额外的小细节,提及外部贡献。