name: Release Plugin on: push: tags: - "[0-9]+.[0-9]+.[0-9]+" - "[0-9]+.[0-9]+.[0-9]+-*" jobs: release: runs-on: ubuntu-latest permissions: contents: write steps: - name: Checkout code uses: actions/checkout@v4 - name: Validate version consistency run: | TAG_VERSION="${GITHUB_REF#refs/tags/}" PKG_VERSION=$(node -p "require('./package.json').version") MANIFEST_VERSION=$(node -p "require('./manifest.json').version") echo "Checking version consistency..." echo "Git tag: $TAG_VERSION" echo "package.json: $PKG_VERSION" echo "manifest.json: $MANIFEST_VERSION" # Check if this is a prerelease tag (alpha, beta, rc) if [[ "$TAG_VERSION" =~ -alpha\. ]] || [[ "$TAG_VERSION" =~ -beta\. ]] || [[ "$TAG_VERSION" =~ -rc\. ]]; then # For prerelease tags, strip the prerelease suffix and compare base version BASE_VERSION="${TAG_VERSION%%-*}" echo "Prerelease tag detected. Base version: $BASE_VERSION" if [ "$BASE_VERSION" != "$PKG_VERSION" ] || [ "$BASE_VERSION" != "$MANIFEST_VERSION" ]; then echo "❌ Base version mismatch detected!" echo "Git tag base: $BASE_VERSION (from $TAG_VERSION)" echo "package.json: $PKG_VERSION" echo "manifest.json: $MANIFEST_VERSION" exit 1 fi echo "✅ Base versions match: $BASE_VERSION (prerelease: $TAG_VERSION)" else # For production releases, require exact match if [ "$TAG_VERSION" != "$PKG_VERSION" ] || [ "$TAG_VERSION" != "$MANIFEST_VERSION" ]; then echo "❌ Version mismatch detected!" echo "Git tag: $TAG_VERSION" echo "package.json: $PKG_VERSION" echo "manifest.json: $MANIFEST_VERSION" exit 1 fi echo "✅ All versions match: $TAG_VERSION" fi - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Run tests run: npm test - name: Build plugin run: npm run build - name: Verify build artifacts run: | echo "Verifying required files exist..." if [ ! -f main.js ]; then echo "❌ main.js not found!" exit 1 fi if [ ! -f manifest.json ]; then echo "❌ manifest.json not found!" exit 1 fi if [ ! -f styles.css ]; then echo "❌ styles.css not found!" exit 1 fi echo "✅ All required files present" echo "File sizes:" ls -lh main.js manifest.json styles.css - name: Create draft release (GitHub) if: github.server_url == 'https://github.com' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | TAG_VERSION="${GITHUB_REF#refs/tags/}" gh release create "$TAG_VERSION" \ --title="$TAG_VERSION" \ --draft \ --notes="$(cat <<'EOF' Release $TAG_VERSION ## Changes *Add release notes here before publishing* ## Installation 1. Download main.js, manifest.json, and styles.css 2. Create a folder in .obsidian/plugins/obsidian-mcp-server/ 3. Copy the three files into the folder 4. Reload Obsidian 5. Enable the plugin in Settings → Community Plugins EOF )" \ main.js \ manifest.json \ styles.css echo "✅ Draft release created: $TAG_VERSION" echo "Visit https://github.com/${{ github.repository }}/releases to review and publish" - name: Create draft release (Gitea) if: github.server_url != 'https://github.com' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | TAG_VERSION="${GITHUB_REF#refs/tags/}" # Create release via API RESPONSE=$(curl -s -X POST \ -H "Accept: application/json" \ -H "Authorization: token $GITHUB_TOKEN" \ -H "Content-Type: application/json" \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/releases" \ -d "$(cat <