diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 2ffd68b..6b81086 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -7,18 +7,17 @@ on: branches: [main] jobs: - test: - name: Unit Tests + test-and-build: + name: Test & Build runs-on: ubuntu-latest + container: + image: node:22-bookworm + steps: - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'npm' + run: | + git clone ${{ gitea.server_url }}/${{ gitea.repository }}.git . + git checkout ${{ gitea.sha }} - name: Install dependencies run: npm ci @@ -27,31 +26,13 @@ jobs: run: npm run typecheck - name: Run unit tests - run: npm test - - build: - name: Build Extension - runs-on: ubuntu-latest - needs: test - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'npm' - - - name: Install dependencies - run: npm ci + run: npm test -- --run - name: Build extension run: npm run build - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: lexai-chrome-mv3-${{ github.sha }} - path: .output/chrome-mv3/ - retention-days: 7 + - name: Verify build output + run: | + echo "Build contents:" + ls -la .output/chrome-mv3/ + echo "✅ Build successful" diff --git a/.gitea/workflows/preview.yml b/.gitea/workflows/preview.yml index 7e387b0..e8aa2b1 100644 --- a/.gitea/workflows/preview.yml +++ b/.gitea/workflows/preview.yml @@ -8,15 +8,18 @@ jobs: preview-build: name: PR Preview Build runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 + container: + image: node:22-bookworm - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'npm' + steps: + - name: Install zip curl + run: apt-get update -qq && apt-get install -y zip curl + + - name: Checkout PR + run: | + git clone ${{ gitea.server_url }}/${{ gitea.repository }}.git . + git fetch origin pull/${{ gitea.event.pull_request.number }}/head:pr + git checkout pr - name: Install dependencies run: npm ci @@ -25,28 +28,21 @@ jobs: run: npm run typecheck - name: Run unit tests - run: npm test + run: npm test -- --run - name: Build extension run: npm run build - name: Package preview ZIP - run: npm run zip - - - name: Upload PR artifact - uses: actions/upload-artifact@v4 - with: - name: lexai-pr-${{ github.event.pull_request.number }}-preview - path: .output/lexai-*.zip - retention-days: 3 + run: | + PR_NUM=${{ gitea.event.pull_request.number }} + zip -r lexai-pr-${PR_NUM}-preview.zip .output/chrome-mv3/ + echo "✅ PR #${PR_NUM} build successful" - name: Comment on PR - uses: actions/github-script@v7 - with: - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: `## ⚡ LexAI Preview Build Ready\n\n✅ Tests passed\n✅ Build successful\n\n📦 Download the extension ZIP from the **Artifacts** section above to test this PR.\n\nCommit: \`${{ github.sha }}\`` - }) + run: | + PR_NUM=${{ gitea.event.pull_request.number }} + curl -s -X POST "${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/issues/${PR_NUM}/comments" \ + -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ + -H "Content-Type: application/json" \ + -d "{\"body\": \"## ⚡ LexAI Preview Build Ready\n\n✅ Tests passed\n✅ Build successful\n✅ TypeScript clean\n\nCommit: \`${{ gitea.sha }}\`\"}" diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 3aa31f9..39847bd 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -3,65 +3,60 @@ name: Release — Package & Publish on: push: tags: - - 'v*.*.*' # Triggers on: git tag v0.1.0 && git push --tags + - 'v*.*.*' jobs: release: name: Build & Package Release runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 + container: + image: node:22-bookworm - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'npm' + steps: + - name: Install zip + run: apt-get update -qq && apt-get install -y zip curl + + - name: Checkout + run: | + git clone ${{ gitea.server_url }}/${{ gitea.repository }}.git . + git checkout ${{ gitea.sha }} - name: Install dependencies run: npm ci - name: Run tests - run: npm test + run: npm test -- --run - name: Build extension run: npm run build - - name: Package as ZIP (Chrome Web Store) - run: npm run zip + - name: Package as ZIP + run: | + VERSION=${{ gitea.ref_name }} + zip -r lexai-chrome-mv3-${VERSION}.zip .output/chrome-mv3/ + echo "ZIP_FILE=lexai-chrome-mv3-${VERSION}.zip" >> $GITHUB_ENV - - name: Get version from tag - id: version - run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT - - - name: Create Gitea Release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITEA_TOKEN }} - with: - tag_name: ${{ github.ref }} - release_name: LexAI ${{ steps.version.outputs.VERSION }} - body: | - ## LexAI ${{ steps.version.outputs.VERSION }} - - ### Installation - 1. Download `lexai-chrome-mv3.zip` below - 2. Go to `chrome://extensions` - 3. Enable Developer Mode - 4. Click "Load unpacked" → extract the zip first - - ### What's new - See CHANGELOG.md for details. - draft: false - prerelease: false + - name: Create Release + run: | + VERSION=${{ gitea.ref_name }} + curl -s -X POST "${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases" \ + -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ + -H "Content-Type: application/json" \ + -d "{ + \"tag_name\": \"${VERSION}\", + \"name\": \"LexAI ${VERSION}\", + \"body\": \"## LexAI ${VERSION}\n\n### Installation\n1. Download ZIP below\n2. Extract it\n3. Open Chrome → chrome://extensions\n4. Enable Developer Mode\n5. Click Load unpacked → select the extracted folder\", + \"draft\": false, + \"prerelease\": false + }" > release.json + cat release.json + echo "RELEASE_ID=$(cat release.json | grep -o '\"id\":[0-9]*' | head -1 | cut -d: -f2)" >> $GITHUB_ENV - name: Upload ZIP to Release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITEA_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: .output/lexai-*.zip - asset_name: lexai-chrome-mv3-${{ steps.version.outputs.VERSION }}.zip - asset_content_type: application/zip + run: | + VERSION=${{ gitea.ref_name }} + RELEASE_ID=${{ env.RELEASE_ID }} + curl -s -X POST "${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases/${RELEASE_ID}/assets" \ + -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ + -F "attachment=@lexai-chrome-mv3-${VERSION}.zip" + echo "✅ Release ${VERSION} published!"