Skip to content

Commit 2efbac4

Browse files
committed
Initial release: Taskling v0.0.2
Lightweight VS Code task runner sidebar extension with grouped/flat view, source filtering, and CI/CD workflows for GitHub Actions publishing.
0 parents  commit 2efbac4

19 files changed

Lines changed: 2512 additions & 0 deletions

.github/workflows/ci.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
build:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- uses: actions/checkout@v4
15+
16+
- uses: actions/setup-node@v4
17+
with:
18+
node-version: 20
19+
cache: yarn
20+
21+
- run: yarn install --frozen-lockfile
22+
23+
- run: yarn lint
24+
25+
- run: yarn format:check
26+
27+
- run: yarn compile

.github/workflows/publish.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: Publish
2+
3+
on:
4+
workflow_dispatch:
5+
push:
6+
tags:
7+
- "v*"
8+
9+
permissions:
10+
contents: write
11+
12+
jobs:
13+
publish:
14+
runs-on: ubuntu-latest
15+
16+
steps:
17+
- uses: actions/checkout@v4
18+
19+
- uses: actions/setup-node@v4
20+
with:
21+
node-version: 20
22+
cache: yarn
23+
24+
- run: yarn install --frozen-lockfile
25+
26+
- run: yarn lint
27+
28+
- run: yarn format:check
29+
30+
- run: yarn compile
31+
32+
- run: npx @vscode/vsce package
33+
34+
- run: npx @vscode/vsce publish
35+
env:
36+
VSCE_PAT: ${{ secrets.VSCE_PAT }}
37+
38+
- name: Create GitHub Release
39+
if: startsWith(github.ref, 'refs/tags/v')
40+
env:
41+
GH_TOKEN: ${{ github.token }}
42+
run: gh release create "${{ github.ref_name }}" *.vsix --generate-notes

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
out
2+
dist
3+
node_modules
4+
.vscode-test/
5+
*.vsix
6+
.history/
7+
_reference/

.prettierrc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"singleQuote": true,
3+
"semi": false,
4+
"tabWidth": 2,
5+
"trailingComma": "all"
6+
}

.vscodeignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
.vscode/**
2+
.vscode-test/**
3+
src/**
4+
.gitignore
5+
.yarnrc
6+
vsc-extension-quickstart.md
7+
**/tsconfig.json
8+
**/.eslintrc.json
9+
**/*.map
10+
**/*.ts

.yarnrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--ignore-engines true

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Changelog
2+
3+
All notable changes to the Taskling extension will be documented in this file.
4+
5+
## 0.0.1
6+
7+
Initial release.
8+
9+
### Features
10+
11+
- Auto-discover all tasks recognized by VS Code
12+
- One-click run/stop from the sidebar
13+
- Grouped or flat view toggle
14+
- Source filtering with `includeSources` and `excludeSources` settings
15+
- Case-insensitive source matching
16+
- Auto-refresh when settings change

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 Igor Volnistov
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Taskling
2+
3+
<a href="http://opensource.org/licenses/MIT" target="_blank" rel="noreferrer noopener"><img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="MIT License"></a>
4+
5+
Discover and run all VS Code tasks from a convenient sidebar panel.
6+
7+
Taskling automatically finds every task recognized by VS Code — from `.vscode/tasks.json`, `package.json` scripts, and any other task provider — and puts them one click away in the activity bar.
8+
9+
## Features
10+
11+
- **Auto-discovery** — automatically detects all tasks recognized by VS Code
12+
- **One-click run/stop** — click a task to run it; click again to stop
13+
- **Grouped or flat view** — toggle between a flat list and tasks grouped by source
14+
- **Source filtering** — include or exclude tasks by source (npm, gulp, tsc, etc.)
15+
- **Auto-refresh** — sidebar updates automatically when settings change
16+
- **Lightweight** — zero runtime dependencies, instant activation
17+
18+
## Usage
19+
20+
Open the Taskling panel from the activity bar. The extension scans for tasks automatically.
21+
22+
Click any task to run it. A running task shows a terminal icon — click it again to stop.
23+
24+
Use the toolbar buttons to switch between grouped/flat view or manually refresh the task list.
25+
26+
## Settings
27+
28+
| Setting | Type | Default | Description |
29+
|---------|------|---------|-------------|
30+
| `taskling.defaultGrouped` | `boolean` | `false` | Initially show tasks grouped by source |
31+
| `taskling.excludeSources` | `string[]` | `[]` | Hide tasks from specific sources (e.g. `["npm", "gulp"]`) |
32+
| `taskling.includeSources` | `string[]` | `[]` | Only show tasks from these sources. Takes priority over `excludeSources`. |
33+
34+
Filtering is case-insensitive.
35+
36+
## License
37+
38+
[MIT](LICENSE)

eslint.config.mjs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import js from '@eslint/js'
2+
import globals from 'globals'
3+
import tseslint from 'typescript-eslint'
4+
import importPlugin from 'eslint-plugin-import'
5+
import { defineConfig, globalIgnores } from 'eslint/config'
6+
7+
export default defineConfig([
8+
globalIgnores(['out', 'dist', '**/*.d.ts']),
9+
{
10+
files: ['**/*.ts'],
11+
extends: [
12+
js.configs.recommended,
13+
tseslint.configs.strictTypeChecked,
14+
],
15+
languageOptions: {
16+
ecmaVersion: 2020,
17+
globals: globals.node,
18+
parserOptions: {
19+
projectService: true,
20+
tsconfigRootDir: import.meta.dirname,
21+
},
22+
},
23+
plugins: {
24+
import: importPlugin,
25+
},
26+
rules: {
27+
'func-style': ['error', 'expression'],
28+
'@typescript-eslint/no-floating-promises': 'error',
29+
'@typescript-eslint/only-throw-error': 'error',
30+
'import/no-useless-path-segments': ['error', { noUselessIndex: true }],
31+
'no-restricted-imports': [
32+
'warn',
33+
{
34+
patterns: [
35+
{
36+
group: ['../*'],
37+
message: 'Use path alias instead of relative imports',
38+
},
39+
{
40+
group: ['**/index'],
41+
message: 'Import can be shortened by removing /index',
42+
},
43+
],
44+
},
45+
],
46+
},
47+
},
48+
])

0 commit comments

Comments
 (0)