Skip to content

Commit 22fe4ac

Browse files
authored
Feature/seo (#98)
* fix: update package.json with enhanced description, version bump, and additional metadata * feat: enhance build process for VS Code and Open VSX, update package.json version, and add marketplace configuration
1 parent 4f31e64 commit 22fe4ac

6 files changed

Lines changed: 120 additions & 23 deletions

File tree

.github/workflows/build-and-publish.yml

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ jobs:
3030
outputs:
3131
version: ${{ steps.package.outputs.version }}
3232
should_publish: ${{ steps.verify.outputs.should_publish }}
33-
vsix_name: ${{ steps.build.outputs.vsix_name }}
33+
vsix_name_vscode: ${{ steps.build.outputs.vsix_name_vscode }}
34+
vsix_name_openvsx: ${{ steps.build.outputs.vsix_name_openvsx }}
3435

3536
steps:
3637
- name: Checkout code
@@ -121,43 +122,67 @@ jobs:
121122
echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
122123
echo "📦 Package version: $VERSION"
123124
124-
- name: Build VSIX package
125+
- name: Build VSIX packages for marketplaces
125126
id: build
126127
if: steps.verify.outputs.should_publish == 'true'
127128
run: |
128129
npm install -g @vscode/vsce@latest
129130
rm -f *.vsix
130-
vsce package
131131
132-
VSIX_NAME="simple-coding-time-tracker-${{ steps.package.outputs.version }}.vsix"
133-
echo "vsix_name=$VSIX_NAME" >> $GITHUB_OUTPUT
132+
VERSION="${{ steps.package.outputs.version }}"
133+
VSIX_NAME="simple-coding-time-tracker-${VERSION}.vsix"
134+
135+
# Build for VS Code Marketplace (categories: Other only)
136+
echo "🔧 Building VSIX for VS Code Marketplace..."
137+
node scripts/prepare-package.js vscode
138+
vsce package
134139
135-
# Validate VSIX
136140
if [ ! -f "$VSIX_NAME" ]; then
137-
echo "❌ VSIX build failed"
141+
echo " VSIX build for VS Code failed"
138142
exit 1
139143
fi
140144
141-
# Verify the package can be listed
142-
vsce ls "$VSIX_NAME"
145+
mv "$VSIX_NAME" "vscode-$VSIX_NAME"
146+
echo "vsix_name_vscode=vscode-$VSIX_NAME" >> $GITHUB_OUTPUT
147+
echo "✅ VS Code Marketplace VSIX built: vscode-$VSIX_NAME"
143148
144-
SIZE=$(stat -c%s "$VSIX_NAME" 2>/dev/null || stat -f%z "$VSIX_NAME")
145-
SIZE_MB=$((SIZE / 1024 / 1024))
149+
# Restore original package.json
150+
node scripts/restore-package.js
146151
147-
if [ $SIZE_MB -gt 10 ]; then
148-
echo "⚠️ Warning: Package size is ${SIZE_MB}MB (consider optimizing)"
149-
else
150-
echo "✅ Package size: ${SIZE_MB}MB"
152+
# Build for Open VSX (categories: Other, Productivity)
153+
echo "🔧 Building VSIX for Open VSX Registry..."
154+
node scripts/prepare-package.js openvsx
155+
vsce package
156+
157+
if [ ! -f "$VSIX_NAME" ]; then
158+
echo "❌ VSIX build for Open VSX failed"
159+
exit 1
151160
fi
152161
153-
echo "✅ VSIX built successfully - $VSIX_NAME"
162+
mv "$VSIX_NAME" "openvsx-$VSIX_NAME"
163+
echo "vsix_name_openvsx=openvsx-$VSIX_NAME" >> $GITHUB_OUTPUT
164+
echo "✅ Open VSX VSIX built: openvsx-$VSIX_NAME"
165+
166+
# Restore original package.json
167+
node scripts/restore-package.js
168+
169+
# Show sizes
170+
for f in vscode-$VSIX_NAME openvsx-$VSIX_NAME; do
171+
SIZE=$(stat -c%s "$f" 2>/dev/null || stat -f%z "$f")
172+
SIZE_KB=$((SIZE / 1024))
173+
echo "📦 $f: ${SIZE_KB}KB"
174+
done
175+
176+
echo "✅ Both marketplace VSIX files built successfully"
154177
155-
- name: Upload VSIX artifact
178+
- name: Upload VSIX artifacts
156179
if: steps.verify.outputs.should_publish == 'true'
157180
uses: actions/upload-artifact@v4
158181
with:
159182
name: extension-vsix-${{ steps.package.outputs.version }}
160-
path: ${{ steps.build.outputs.vsix_name }}
183+
path: |
184+
${{ steps.build.outputs.vsix_name_vscode }}
185+
${{ steps.build.outputs.vsix_name_openvsx }}
161186
retention-days: 90
162187

163188
# 2️⃣ DEPLOY TO VS CODE MARKETPLACE
@@ -211,7 +236,7 @@ jobs:
211236
timeout_minutes: 5
212237
max_attempts: 3
213238
retry_wait_seconds: 30
214-
command: vsce publish -p $VSC_PAT --packagePath ${{ needs.build.outputs.vsix_name }}
239+
command: vsce publish -p $VSC_PAT --packagePath ${{ needs.build.outputs.vsix_name_vscode }}
215240
env:
216241
VSC_PAT: ${{ secrets.VSC_PAT }}
217242

@@ -268,7 +293,7 @@ jobs:
268293
tag_name: v${{ needs.build.outputs.version }}
269294
name: Release v${{ needs.build.outputs.version }}
270295
body_path: release_body.md
271-
files: ${{ needs.build.outputs.vsix_name }}
296+
files: ${{ needs.build.outputs.vsix_name_vscode }}
272297
draft: false
273298
prerelease: false
274299
generate_release_notes: false
@@ -313,7 +338,7 @@ jobs:
313338
timeout_minutes: 5
314339
max_attempts: 3
315340
retry_wait_seconds: 30
316-
command: ovsx publish ${{ needs.build.outputs.vsix_name }} --pat $OPENVSX_PAT
341+
command: ovsx publish ${{ needs.build.outputs.vsix_name_openvsx }} --pat $OPENVSX_PAT
317342
env:
318343
OPENVSX_PAT: ${{ secrets.OPENVSX_PAT }}
319344

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
node_modules
22
out
33
**/*.code-workspace
4-
dist
4+
dist
5+
*.vsix
6+
package.json.backup

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "simple-coding-time-tracker",
33
"displayName": "Simple Coding Time Tracker",
44
"description": "Automatic time tracking for VS Code — Track coding time per project, branch & language with smart activity detection, health reminders, and beautiful visualizations",
5-
"version": "0.7.3",
5+
"version": "0.7.5",
66
"publisher": "noorashuvo",
77
"license": "MIT",
88
"icon": "icon-sctt.png",

scripts/marketplace-config.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"vscode": {
3+
"categories": ["Other"]
4+
},
5+
"openvsx": {
6+
"categories": ["Other", "Productivity"]
7+
}
8+
}

scripts/prepare-package.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/usr/bin/env node
2+
3+
const fs = require('fs');
4+
const path = require('path');
5+
6+
const marketplace = process.argv[2]; // 'vscode' or 'openvsx'
7+
8+
if (!marketplace || !['vscode', 'openvsx'].includes(marketplace)) {
9+
console.error('Usage: node prepare-package.js <vscode|openvsx>');
10+
process.exit(1);
11+
}
12+
13+
// Load configurations
14+
const configPath = path.join(__dirname, 'marketplace-config.json');
15+
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
16+
17+
const packagePath = path.join(__dirname, '..', 'package.json');
18+
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
19+
20+
// Store original for restoration if needed
21+
const backupPath = path.join(__dirname, '..', 'package.json.backup');
22+
if (!fs.existsSync(backupPath)) {
23+
fs.writeFileSync(backupPath, JSON.stringify(packageJson, null, 2) + '\n');
24+
console.log('📦 Created package.json backup');
25+
}
26+
27+
// Apply marketplace-specific overrides
28+
const marketplaceConfig = config[marketplace];
29+
30+
console.log(`\n🔧 Preparing package.json for ${marketplace.toUpperCase()}...\n`);
31+
32+
// Apply each override with logging
33+
Object.keys(marketplaceConfig).forEach(key => {
34+
const oldValue = packageJson[key];
35+
packageJson[key] = marketplaceConfig[key];
36+
37+
console.log(`✓ ${key}:`);
38+
console.log(` Before: ${JSON.stringify(oldValue)}`);
39+
console.log(` After: ${JSON.stringify(marketplaceConfig[key])}`);
40+
});
41+
42+
// Write updated package.json
43+
fs.writeFileSync(packagePath, JSON.stringify(packageJson, null, 2) + '\n');
44+
45+
console.log('\n✅ package.json updated successfully for ' + marketplace.toUpperCase());

scripts/restore-package.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/usr/bin/env node
2+
3+
const fs = require('fs');
4+
const path = require('path');
5+
6+
const backupPath = path.join(__dirname, '..', 'package.json.backup');
7+
const packagePath = path.join(__dirname, '..', 'package.json');
8+
9+
if (fs.existsSync(backupPath)) {
10+
const backup = fs.readFileSync(backupPath, 'utf8');
11+
fs.writeFileSync(packagePath, backup);
12+
fs.unlinkSync(backupPath);
13+
console.log('✅ package.json restored from backup');
14+
} else {
15+
console.log('ℹ️ No backup found, using git checkout');
16+
require('child_process').execSync('git checkout package.json', { stdio: 'inherit' });
17+
}

0 commit comments

Comments
 (0)