diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ff4b233..cfc2606 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -5,61 +5,37 @@ on: branches: [main] pull_request: branches: [main] + workflow_call: jobs: - lint: - runs-on: ubuntu-latest + ci: + runs-on: local-ubuntu-latest timeout-minutes: 10 - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'npm' - - run: npm ci - - run: npm run lint - typecheck: - runs-on: ubuntu-latest - timeout-minutes: 10 steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'npm' - - run: npm ci - - run: npm run tsc + - name: Checkout + uses: actions/checkout@v4 - test: - runs-on: ubuntu-latest - timeout-minutes: 10 - permissions: - checks: write - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - - run: npm ci - - run: npx vitest run --reporter=default --reporter=junit --outputFile=test-results.xml - - uses: dorny/test-reporter@v1 - if: always() - with: - name: Test Results - path: test-results.xml - reporter: java-junit - build: - runs-on: ubuntu-latest - timeout-minutes: 10 - needs: [lint, typecheck, test] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'npm' - - run: npm ci - - run: npm run build + - name: Install dependencies + run: npm ci + + - name: Build plugin + run: npx @kinvolk/headlamp-plugin build + + - name: Lint + run: npm run lint + + - name: Type-check + run: npm run tsc + + - name: Format check + run: npm run format:check + + - name: Run tests + run: npm test diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index acadab4..23f6389 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -4,61 +4,51 @@ on: workflow_dispatch: inputs: version: - description: 'Version to release (without v prefix, e.g., 0.2.0)' + description: 'Release version (e.g. 1.0.0)' required: true type: string +permissions: + contents: write + concurrency: group: release cancel-in-progress: false jobs: ci: - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'npm' - - run: npm ci - - run: npm run lint - - run: npm run tsc - - run: npm test + uses: ./.github/workflows/ci.yaml release: - runs-on: ubuntu-latest - needs: [ci] - permissions: - contents: write + needs: ci + runs-on: local-ubuntu-latest + timeout-minutes: 10 + steps: - name: Validate version format run: | - if ! echo "${{ inputs.version }}" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then - echo "::error::Version must be in format X.Y.Z (e.g., 0.2.0)" + if [[ ! "${{ inputs.version }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Error: Version must be in X.Y.Z format" exit 1 fi - name: Checkout uses: actions/checkout@v4 - - name: Configure git + - name: Configure Git run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" - - name: Update package.json version - run: | - jq --arg version "${{ inputs.version }}" '.version = $version' package.json > package.json.tmp - mv package.json.tmp package.json + - name: Update version in package.json + run: npm version ${{ inputs.version }} --no-git-tag-version - - name: Update artifacthub-pkg.yml version and URL + - name: Update artifacthub-pkg.yml run: | VERSION="${{ inputs.version }}" - RELEASE_URL="https://github.com/${{ github.repository }}/releases/download/v${VERSION}/tns-csi-${VERSION}.tar.gz" - - sed -i "s|^version:.*|version: \"${VERSION}\"|" artifacthub-pkg.yml + PKG_NAME=$(jq -r .name package.json) + RELEASE_URL="https://github.com/${{ github.repository }}/releases/download/v${VERSION}/${PKG_NAME}-${VERSION}.tar.gz" + sed -i "s/^version:.*/version: \"${VERSION}\"/" artifacthub-pkg.yml sed -i "s|headlamp/plugin/archive-url:.*|headlamp/plugin/archive-url: \"${RELEASE_URL}\"|" artifacthub-pkg.yml - name: Update appVersion from latest tns-csi release @@ -81,59 +71,46 @@ jobs: run: npm ci - name: Build plugin - run: npm run build + run: npx @kinvolk/headlamp-plugin build - name: Package plugin run: npx @kinvolk/headlamp-plugin package + - name: Prepare release tarball + run: | + VERSION="${{ inputs.version }}" + PKG_NAME=$(jq -r .name package.json) + TARBALL="${PKG_NAME}-${VERSION}.tar.gz" + mv *.tar.gz "$TARBALL" + echo "TARBALL=$TARBALL" >> $GITHUB_ENV + echo "PKG_NAME=$PKG_NAME" >> $GITHUB_ENV + - name: Validate tarball run: | - EXPECTED="tns-csi-${{ inputs.version }}.tar.gz" - if [ ! -f "$EXPECTED" ]; then - echo "::error::Expected tarball not found: $EXPECTED" - exit 1 - fi - echo "Tarball validated: $EXPECTED" + echo "Tarball: ${{ env.TARBALL }}" + ls -lh "${{ env.TARBALL }}" + tar -tzf "${{ env.TARBALL }}" | head -20 + tar -tzf "${{ env.TARBALL }}" | grep -q "main.js" || { echo "Error: main.js not found in tarball"; exit 1; } - name: Compute checksum - id: compute_checksum run: | - TARBALL="tns-csi-${{ inputs.version }}.tar.gz" - CHECKSUM=$(sha256sum "$TARBALL" | awk '{print $1}') - echo "checksum=${CHECKSUM}" >> $GITHUB_OUTPUT - echo "Checksum: sha256:${CHECKSUM}" + CHECKSUM=$(sha256sum "${{ env.TARBALL }}" | awk '{print $1}') + echo "CHECKSUM=$CHECKSUM" >> $GITHUB_ENV + sed -i "s|headlamp/plugin/archive-checksum:.*|headlamp/plugin/archive-checksum: sha256:${CHECKSUM}|" artifacthub-pkg.yml - - name: Update checksum in metadata + - name: Commit and tag run: | - CHECKSUM="${{ steps.compute_checksum.outputs.checksum }}" - sed -i "s|headlamp/plugin/archive-checksum:.*|headlamp/plugin/archive-checksum: \"sha256:${CHECKSUM}\"|" artifacthub-pkg.yml - - - name: Commit version bump and metadata - run: | - git add package.json artifacthub-pkg.yml - git commit -m "chore: release v${{ inputs.version }}" - git push origin main - - - name: Create and push tag - run: | - git tag "v${{ inputs.version }}" - git push origin "v${{ inputs.version }}" + VERSION="${{ inputs.version }}" + git add package.json package-lock.json artifacthub-pkg.yml + git commit -m "release: v${VERSION}" + git tag "v${VERSION}" + git push origin main --tags - name: Create GitHub Release - uses: softprops/action-gh-release@v2 - with: - tag_name: "v${{ inputs.version }}" - files: tns-csi-${{ inputs.version }}.tar.gz - fail_on_unmatched_files: true - draft: false - prerelease: false - generate_release_notes: true env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Summary + GH_TOKEN: ${{ github.token }} run: | - echo "Version bumped to ${{ inputs.version }}" - echo "Metadata updated with checksum sha256:${{ steps.compute_checksum.outputs.checksum }}" - echo "Tag v${{ inputs.version }} created" - echo "GitHub release published with tarball" + VERSION="${{ inputs.version }}" + gh release create "v${VERSION}" "${{ env.TARBALL }}" \ + --title "v${VERSION}" \ + --generate-notes diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..22a9943 --- /dev/null +++ b/renovate.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["config:recommended"] +}