automate release and generate artifacts using github action
This commit is contained in:
		
							parent
							
								
									ee04e2f81f
								
							
						
					
					
						commit
						b4c76332f9
					
				| 
						 | 
				
			
			@ -0,0 +1,116 @@
 | 
			
		|||
name: Create Release
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: write
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
      - master
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  release:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
      - name: Set up Node.js
 | 
			
		||||
        uses: actions/setup-node@v2
 | 
			
		||||
        with:
 | 
			
		||||
          node-version: "20"
 | 
			
		||||
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        if: ${{ hashFiles('package.json') != '' }}
 | 
			
		||||
        run: npm install
 | 
			
		||||
 | 
			
		||||
      - name: Build the plugin
 | 
			
		||||
        if: ${{ hashFiles('package.json') != '' }}
 | 
			
		||||
        run: npm run build
 | 
			
		||||
 | 
			
		||||
      - name: Extract version from manifest.json
 | 
			
		||||
        id: get_version
 | 
			
		||||
        run: |
 | 
			
		||||
          version=$(jq -r '.version' manifest.json)
 | 
			
		||||
          echo "Version found: $version"
 | 
			
		||||
          echo "manifest_version=$version" >> $GITHUB_ENV
 | 
			
		||||
 | 
			
		||||
      - name: Check if version exists
 | 
			
		||||
        id: check_version
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        with:
 | 
			
		||||
          script: |
 | 
			
		||||
            console.log("Checking version: " + process.env.manifest_version);
 | 
			
		||||
            try {
 | 
			
		||||
              const { data: releases } = await github.rest.repos.getReleaseByTag({
 | 
			
		||||
                owner: context.repo.owner,
 | 
			
		||||
                repo: context.repo.repo,
 | 
			
		||||
                tag: process.env.manifest_version
 | 
			
		||||
              });
 | 
			
		||||
              const exists = releases.tag_name === process.env.manifest_version;
 | 
			
		||||
              console.log(`Version exists: ${exists}`);
 | 
			
		||||
              core.setOutput("version_exists", exists);
 | 
			
		||||
            } catch (error) {
 | 
			
		||||
              if (error.status === 404) {
 | 
			
		||||
                console.log('Release does not exist.');
 | 
			
		||||
                core.setOutput("version_exists", false);
 | 
			
		||||
              } else {
 | 
			
		||||
                throw error;
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
      - name: Bump version if exists
 | 
			
		||||
        if: ${{ steps.check_version.outputs.version_exists == 'true' }}
 | 
			
		||||
        run: |
 | 
			
		||||
          version=$(jq -r '.version' manifest.json)
 | 
			
		||||
          IFS='.' read -ra parts <<< "$version"
 | 
			
		||||
          parts[-1]=$((parts[-1] + 1))
 | 
			
		||||
          new_version="${parts[*]}"
 | 
			
		||||
          new_version=${new_version// /.}
 | 
			
		||||
          echo "New version in manifest.json: $new_version"
 | 
			
		||||
          jq ".version = \"$new_version\"" manifest.json > tmp_manifest.json
 | 
			
		||||
          mv tmp_manifest.json manifest.json
 | 
			
		||||
          echo "New version in package.json: $new_version"
 | 
			
		||||
          jq ".version = \"$new_version\"" package.json > tmp_package.json
 | 
			
		||||
          mv tmp_package.json package.json
 | 
			
		||||
          git config user.name "github-actions"
 | 
			
		||||
          git config user.email "github-actions@github.com"
 | 
			
		||||
          git add manifest.json package.json
 | 
			
		||||
          git commit -m "Bump version to $new_version"
 | 
			
		||||
          git push
 | 
			
		||||
          echo "manifest_version=$new_version" >> $GITHUB_ENV
 | 
			
		||||
 | 
			
		||||
          echo -e "\e[32mVersion bumped to $new_version\e[0m"
 | 
			
		||||
          echo -e "\e[32mRelease will be created in new workflow\e[0m"
 | 
			
		||||
 | 
			
		||||
      - name: Create GitHub Release
 | 
			
		||||
        id: create_release
 | 
			
		||||
        uses: actions/create-release@v1
 | 
			
		||||
        env:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
        with:
 | 
			
		||||
          tag_name: ${{ env.manifest_version }}
 | 
			
		||||
          release_name: Release ${{ env.manifest_version }}
 | 
			
		||||
          draft: false
 | 
			
		||||
          prerelease: false
 | 
			
		||||
 | 
			
		||||
      - name: Upload Release Assets
 | 
			
		||||
        uses: actions/upload-release-asset@v1
 | 
			
		||||
        env:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
        with:
 | 
			
		||||
          upload_url: ${{ steps.create_release.outputs.upload_url }}
 | 
			
		||||
          asset_path: ./main.js
 | 
			
		||||
          asset_name: main.js
 | 
			
		||||
          asset_content_type: application/javascript
 | 
			
		||||
 | 
			
		||||
      - name: Upload manifest.json
 | 
			
		||||
        uses: actions/upload-release-asset@v1
 | 
			
		||||
        env:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
        with:
 | 
			
		||||
          upload_url: ${{ steps.create_release.outputs.upload_url }}
 | 
			
		||||
          asset_path: ./manifest.json
 | 
			
		||||
          asset_name: manifest.json
 | 
			
		||||
          asset_content_type: application/json
 | 
			
		||||
		Loading…
	
		Reference in New Issue