Releasing LeakCanary¶
Preparing the release environment¶
Set up your Sonatype OSSRH account¶
- Create a Sonatype OSSRH JIRA account.
- Create a ticket to request access to the
com.squareup.leakcanary
project. Here’s an example: OSSRH-54959. - Then ask someone with deployer role from the LeakCanary team to confirm access.
Set up your signing key¶
# 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>
Set up your home gradle.properties¶
Add this to your ~/.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>
Set up the Google Analytics docs key¶
Add this to your ~/.bashrc
:
export LEAKCANARY_GOOGLE_ANALYTICS_KEY="UA-142834539-1"
Set up GitHub CLI¶
Install GitHub CLI
brew install gh
Install jq, a CLI Json processor
brew install jq
Set up aliases for milestone management:
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 }'"
Install or update the doc generation dependencies¶
python3 -m venv venv
source venv/bin/activate
pip3 install --requirement docs/requirements.txt
Releasing¶
-
Create a local release branch from
main
git checkout main && \ git pull && \ git checkout -b release_3.0-alpha-9
-
Update
VERSION_NAME
ingradle.properties
(remove-SNAPSHOT
)sed -i '' 's/VERSION_NAME=3.0-alpha-9-SNAPSHOT/VERSION_NAME=3.0-alpha-9/' gradle.properties
-
Update the current version and next version in
mkdocs.yml
sed -i '' 's/3.0-alpha-9/NEXT/' mkdocs.yml sed -i '' 's/2.14/3.0-alpha-9/' mkdocs.yml
-
Create the release
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
Note: if anything goes wrong, you can manually drop the release at https://s01.oss.sonatype.org/
- Merge back to main
git checkout main && \ git pull && \ git merge --no-ff release_3.0-alpha-9
-
Update
VERSION_NAME
ingradle.properties
(increase version and add-SNAPSHOT
)sed -i '' 's/VERSION_NAME=3.0-alpha-9/VERSION_NAME=NEXT-SNAPSHOT/' gradle.properties
-
Generate the Dokka docs
rm -rf docs/api && ./gradlew siteDokka
-
Update the changelog (commit list)
mate docs/changelog.md
-
Deploy the docs locally then open the changelog and check everything looks good
source venv/bin/activate && \ mkdocs serve
-
Finish up the release
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.github.io/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
-
Open the v3.0-alpha-9 release to confirm everything looks good.
-
Upload shark-cli to 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
-
Wait for the release to be available on Maven Central.
- Tell your friends, update all of your apps, and tweet the new release. As a nice extra touch, mention external contributions.