From bea2ea2a0fbabe04ac8ab5498eac7f619d230e96 Mon Sep 17 00:00:00 2001 From: abhishekbhakat Date: Thu, 27 Mar 2025 06:28:16 +0000 Subject: [PATCH 1/2] Sort folders first then files --- package.json | 4 ++-- src/providers/prompterTreeProvider.ts | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 68af5c7..518e767 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "prompter", "displayName": "Prompter", "description": "Easy prompt generation and apply edits using prompter.", - "version": "0.0.1", + "version": "0.0.2", "publisher": "abhishekbhakat", - "repository": "https://github.com/abhishekbhakat/prompter", + "repository": "https://git.bhakat.dev/abhishekbhakat/Prompter", "engines": { "vscode": "^1.98.0" }, diff --git a/src/providers/prompterTreeProvider.ts b/src/providers/prompterTreeProvider.ts index 5883e1a..7ea9210 100644 --- a/src/providers/prompterTreeProvider.ts +++ b/src/providers/prompterTreeProvider.ts @@ -85,7 +85,21 @@ export class PrompterTreeProvider implements vscode.TreeDataProvider { + // Sort by type first (directories first), then alphabetically by name + const sortedFiles = [...files].sort((a, b) => { + const [nameA, typeA] = a; + const [nameB, typeB] = b; + + // If types are different, directories (type 2) come before files (type 1) + if (typeA !== typeB) { + return typeB - typeA; // Descending order by type puts directories first + } + + // If types are the same, sort alphabetically by name + return nameA.localeCompare(nameB, undefined, { sensitivity: 'base' }); + }); + + return sortedFiles.map(([name, type]) => { const filePath = path.join(dirPath, name); const uri = vscode.Uri.file(filePath); -- 2.49.1 From 4b38333d23a08d98924a8ff1d07001a5b753b2ea Mon Sep 17 00:00:00 2001 From: abhishekbhakat Date: Thu, 27 Mar 2025 07:08:29 +0000 Subject: [PATCH 2/2] Release workflow --- .gitea/workflows/release.yaml | 84 +++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 .gitea/workflows/release.yaml diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml new file mode 100644 index 0000000..24a835a --- /dev/null +++ b/.gitea/workflows/release.yaml @@ -0,0 +1,84 @@ +name: Release VSCode Extension +run-name: ${{ gitea.actor }} is releasing a new version 🚀 +on: + push: + tags: + - '[0-9]+.[0-9]+.[0-9]+' + +jobs: + release: + runs-on: ubuntu-latest + + steps: + # Step 1: Checkout the repository code + - name: Checkout code + uses: actions/checkout@v4 + + # Step 2: Set up Node.js environment + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '14' + + # Step 3: Install jq for JSON parsing + - name: Install jq + run: sudo apt-get install -y jq + + # Step 4: Install project dependencies inside prompter directory + - name: Install dependencies + run: npm install + + # Step 5: Install vsce globally + - name: Install vsce globally + run: npm install -g vsce + + # Step 6: Install additional dev dependencies for building inside prompter directory + - name: Install build tools + run: npm install --save-dev webpack webpack-cli ts-loader + + # Step 7: Build the extension inside prompter directory + - name: Build the extension + run: npm run webpack:prod + + # Step 8: Package the extension into a VSIX file inside prompter directory + - name: Package the extension + run: vsce package + + # Step 9: Extract the tag name from gitea.ref + - name: Extract tag name + run: | + TAG_NAME=$(echo "${{ gitea.ref }}" | sed 's/refs\/tags\///') + echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV + + # Step 10: Determine the VSIX file name from package.json inside prompter directory + - name: Get VSIX file name + run: | + NAME=$(jq -r .name package.json) + VERSION=$(jq -r .version package.json) + VSIX_FILE="${NAME}-${VERSION}.vsix" + echo "VSIX_FILE=$VSIX_FILE" >> $GITHUB_ENV + + # Step 11: Create a new release in Gitea + - name: Create release + run: | + curl -X POST \ + -H "Authorization: token ${{ gitea.token }}" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\": \"$TAG_NAME\", \"name\": \"Release $TAG_NAME\", \"body\": \"Automated release for version $TAG_NAME\"}" \ + https://git.bhakat.dev/api/v1/repos/abhishekbhakat/Prompter/releases + + # Step 12: Retrieve the release ID + - name: Get release ID + run: | + RELEASE_ID=$(curl -s -H "Authorization: token ${{ gitea.token }}" \ + https://git.bhakat.dev/api/v1/repos/abhishekbhakat/Prompter/releases/tags/$TAG_NAME | jq .id) + echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV + + # Step 13: Upload the VSIX file as a release asset (from prompter directory) + - name: Upload VSIX to release + run: | + curl -X POST \ + -H "Authorization: token ${{ gitea.token }}" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @"prompter/$VSIX_FILE" \ + https://git.bhakat.dev/api/v1/repos/abhishekbhakat/Prompter/releases/$RELEASE_ID/assets?name=$VSIX_FILE -- 2.49.1