diff --git a/.github/workflows/web-release.yml b/.github/workflows/web-release.yml new file mode 100644 index 0000000000..9085d6ecc3 --- /dev/null +++ b/.github/workflows/web-release.yml @@ -0,0 +1,80 @@ +name: create capa Explorer Web release + +on: + workflow_dispatch: + inputs: + version: + description: 'Version number for the release' + required: true + type: string + +jobs: + build-and-release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set release name + id: set_release_name + run: echo "RELEASE_NAME=capa-explorer-web-${{ github.event.inputs.version }}-${GITHUB_SHA::7}" >> $GITHUB_ENV + + - name: Check if release already exists + run: | + if ls web/explorer/releases/capa-explorer-web-${{ github.event.inputs.version }}-* 1> /dev/null 2>&1; then + echo "A release with version ${{ github.event.inputs.version }} already exists" + exit 1 + fi + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: 20 + cache: 'npm' + cache-dependency-path: 'web/explorer/package-lock.json' + + - name: Install dependencies + run: npm ci + working-directory: web/explorer + + - name: Run linting + run: npm run lint + working-directory: web/explorer + + - name: Check formatting + run: npm run format:check + working-directory: web/explorer + + - name: Run tests + run: npm run test + working-directory: web/explorer + + - name: Build offline bundle + run: npm run build:bundle + working-directory: web/explorer + + - name: Compress bundle + run: zip -r ${{ env.RELEASE_NAME }}.zip capa-explorer-web + working-directory: web/explorer + + - name: Create releases directory + run: mkdir -vp web/explorer/releases + + - name: Move archive release to releases folder + run: mv web/explorer/${{ env.RELEASE_NAME }}.zip web/explorer/releases + + - name: Commit and push release + run: | + git config --local user.email "capa-dev@mandiant.com" + git config --local user.name "Capa Bot" + git add web/explorer/releases/${{ env.RELEASE_NAME }}.zip + git commit -m "explorer web: add release ${{ env.RELEASE_NAME }}" + git push + + - name: Remove older releases + # keep only the latest 3 releases + run: ls -t capa-explorer-web-*.zip | tail -n +4 | xargs -r rm -- + working-directory: web/explorer/releases + + - name: Clean up + if: always() + run: rm -f ${{ env.RELEASE_NAME }}.zip diff --git a/web/explorer/.gitignore b/web/explorer/.gitignore index 064b5fed82..c734baff7b 100644 --- a/web/explorer/.gitignore +++ b/web/explorer/.gitignore @@ -7,6 +7,9 @@ yarn-error.log* pnpm-debug.log* lerna-debug.log* +# capa Explorer Web Releases +releases/ + # Dependencies, build results, and other generated files node_modules .DS_Store