This document describes how to set up publishing for the ShellTime JetBrains plugin.
Add the following secrets to your GitHub repository at: Settings → Secrets and variables → Actions → New repository secret
| Secret Name | Description | How to Get |
|---|---|---|
JETBRAINS_MARKETPLACE_TOKEN |
Plugin repository upload token | JetBrains Marketplace |
CERTIFICATE_CHAIN |
Plugin signing certificate chain | See Plugin Signing |
PRIVATE_KEY |
Plugin signing private key | See Plugin Signing |
PRIVATE_KEY_PASSWORD |
Password for private key | Your chosen password |
| Secret Name | Description | How to Get |
|---|---|---|
CODECOV_TOKEN |
Codecov upload token | Codecov Dashboard |
| Secret Name | Description | How to Get |
|---|---|---|
ANTHROPIC_API_KEY |
Anthropic API key for Claude | Anthropic Console |
- Go to JetBrains Marketplace
- Sign in with your JetBrains Account
- Go to your profile → My Tokens or directly to https://plugins.jetbrains.com/author/me/tokens
- Click Generate Token
- Give it a name (e.g., "GitHub Actions")
- Copy the token and add it as
JETBRAINS_MARKETPLACE_TOKENsecret
JetBrains requires plugins to be signed for distribution. You need to generate a certificate.
# Generate private key
openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:4096
# Generate certificate signing request
openssl req -new -key private.pem -out request.csr
# Generate self-signed certificate (valid for 1 year)
openssl x509 -req -days 365 -in request.csr -signkey private.pem -out chain.crt
# Encrypt private key with password
openssl pkcs8 -topk8 -inform PEM -outform PEM -in private.pem -out private_encrypted.pem- Go to JetBrains Marketplace
- Navigate to your plugin page
- Request a certificate from JetBrains (for verified publishers)
After generating certificates:
-
CERTIFICATE_CHAIN: Contents of
chain.crt-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIUe... -----END CERTIFICATE----- -
PRIVATE_KEY: Contents of
private_encrypted.pem-----BEGIN ENCRYPTED PRIVATE KEY----- MIIJrTBXBgkqhkiG9w0BBQ... -----END ENCRYPTED PRIVATE KEY----- -
PRIVATE_KEY_PASSWORD: The password you used to encrypt the private key
- Go to Codecov
- Sign in with GitHub
- Add your repository
- Copy the upload token from the repository settings
- Add it as
CODECOV_TOKENsecret
The CI/CD pipeline uses Release Please for automated releases:
-
Automatic Version Bumping: Based on conventional commits
feat:→ minor version bumpfix:→ patch version bumpfeat!:orBREAKING CHANGE:→ major version bump
-
Release Flow:
- Push to
mainbranch triggers CI - Release Please creates/updates a release PR
- Merging the release PR triggers:
- Version bump in
gradle.properties - CHANGELOG.md update
- GitHub Release creation
- Plugin published to JetBrains Marketplace
- Version bump in
- Push to
To trigger a release manually:
# Build the plugin
./gradlew buildPlugin
# The ZIP file will be at:
# build/distributions/shelltime-jetbrains-{version}.zip
# Publish (requires PUBLISH_TOKEN environment variable)
PUBLISH_TOKEN=your_token ./gradlew publishPluginBefore automated publishing works, you need to submit the plugin manually:
- Build the plugin:
./gradlew buildPlugin - Go to JetBrains Marketplace
- Click Upload plugin
- Upload
build/distributions/shelltime-jetbrains-0.0.1.zip - Fill in plugin details:
- Name: ShellTime
- Vendor: ShellTime (or your organization)
- Category: Productivity
- Tags: time tracking, productivity, analytics
- Submit for review
After approval, automated publishing via CI/CD will work.
After setting up secrets, verify by:
- Push a commit to
main - Check GitHub Actions → CI workflow
- Verify all jobs pass:
- ✅ Build
- ✅ Test
- ✅ Coverage upload
- ✅ Release Please (creates PR)
When you merge the release PR:
- ✅ Publish job runs
- ✅ Plugin uploaded to JetBrains Marketplace