Skip to content

ci: use package.json version, skip if already published #23

ci: use package.json version, skip if already published

ci: use package.json version, skip if already published #23

Workflow file for this run

name: Publish Package and Create Release
on:
push:
branches:
- main
workflow_dispatch:
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
id-token: write
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: npm ci
- name: Get package version
id: package-version
run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
- name: Check if version already published
id: check-version
run: |
PUBLISHED=$(npm view claude-code-usage@${{ steps.package-version.outputs.version }} version 2>/dev/null || echo "")
if [ "$PUBLISHED" = "${{ steps.package-version.outputs.version }}" ]; then
echo "skip=true" >> $GITHUB_OUTPUT
echo "Version ${{ steps.package-version.outputs.version }} already published, skipping..."
else
echo "skip=false" >> $GITHUB_OUTPUT
echo "Version ${{ steps.package-version.outputs.version }} not published yet, will publish..."
fi
- name: Test package
if: steps.check-version.outputs.skip == 'false'
run: npm test || echo "No tests specified"
- name: Publish to npm (Trusted Publishing)
if: steps.check-version.outputs.skip == 'false'
run: npm publish --provenance --access public
- name: Setup Node.js for GitHub Packages
if: steps.check-version.outputs.skip == 'false'
uses: actions/setup-node@v4
with:
node-version: '18'
registry-url: 'https://npm.pkg.github.com'
- name: Configure package for GitHub Packages
if: steps.check-version.outputs.skip == 'false'
run: |
cp package.json package.json.backup
node -e "
const pkg = require('./package.json');
pkg.name = '@evanlong-me/claude-code-usage';
pkg.publishConfig = { registry: 'https://npm.pkg.github.com' };
require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));
"
- name: Publish to GitHub Packages
if: steps.check-version.outputs.skip == 'false'
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ github.token }}
- name: Restore original package.json
if: steps.check-version.outputs.skip == 'false'
run: mv package.json.backup package.json
- name: Create Git tag
if: steps.check-version.outputs.skip == 'false'
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git tag -a "v${{ steps.package-version.outputs.version }}" -m "Release v${{ steps.package-version.outputs.version }}" || true
git push origin "v${{ steps.package-version.outputs.version }}" || true
- name: Generate changelog
if: steps.check-version.outputs.skip == 'false'
id: changelog
run: |
echo "changelog<<EOF" >> $GITHUB_OUTPUT
PREV_TAG=$(git describe --tags --abbrev=0 HEAD~1 2>/dev/null || echo "")
if [ -n "$PREV_TAG" ]; then
git log --pretty=format:"- %s" $PREV_TAG..HEAD >> $GITHUB_OUTPUT
else
git log --pretty=format:"- %s" -10 >> $GITHUB_OUTPUT
fi
echo "" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Create GitHub Release
if: steps.check-version.outputs.skip == 'false'
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ steps.package-version.outputs.version }}
name: Release v${{ steps.package-version.outputs.version }}
body: |
## Changes in v${{ steps.package-version.outputs.version }}
${{ steps.changelog.outputs.changelog }}
## Installation
```bash
# From npm
npm install -g claude-code-usage
# From GitHub Packages
npm install -g @evanlong-me/claude-code-usage --registry=https://npm.pkg.github.com
```
## Usage
```bash
ccu
```
draft: false
prerelease: false