 70b5287a41
			
		
	
	
		70b5287a41
		
			
		
	
	
	
	
		
			
			* chore(deps): update codeberg.org/forgejo/forgejo docker tag to v1.19.4 * wip * Update app version [ready] --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Tipi CI <ci@runtipi.io>
		
			
				
	
	
		
			163 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| name: Renovate CI
 | |
| on:
 | |
|   pull_request:
 | |
| 
 | |
| jobs:
 | |
|   get-last-commit-message:
 | |
|     if: contains(github.head_ref, 'renovate/')
 | |
|     runs-on: ubuntu-latest
 | |
|     steps:
 | |
|       - name: Checkout
 | |
|         uses: actions/checkout@v3
 | |
| 
 | |
|       - name: Get last commit message
 | |
|         id: get-last-commit-message
 | |
|         run: |
 | |
|           echo "last_commit_message=$(git log -1 --pretty=%B)" >> $GITHUB_OUTPUT          
 | |
| 
 | |
|   update-config:
 | |
|     needs: get-last-commit-message
 | |
|     if: "!contains(${{ needs.get-last-commit-message.outputs.last_commit_message }}, '[ready]')"
 | |
|     runs-on: ubuntu-latest
 | |
|     steps:
 | |
|       - name: Checkout
 | |
|         uses: actions/checkout@v3
 | |
|         with:
 | |
|           fetch-depth: 0
 | |
|           token: ${{ secrets.PERSONAL_TOKEN }}
 | |
| 
 | |
|       - name: Get changed files
 | |
|         uses: jitterbit/get-changed-files@v1
 | |
|         id: files
 | |
| 
 | |
|       - name: Apply config update
 | |
|         run: |
 | |
|           for changed_file in ${{ steps.files.outputs.all }}; do
 | |
|             echo "Changed file: $changed_file" # example: apps/jackett/docker-compose.yml
 | |
|             if [[ $changed_file == *"docker-compose.yml"* ]]; then
 | |
|               app_name=$(echo $changed_file | cut -d'/' -f 2)
 | |
|               echo "App name: $app_name"
 | |
|               ./.github/workflows/renovate-app-version.sh $app_name
 | |
|             fi
 | |
|           done          
 | |
| 
 | |
|       - name: Commit and push changes
 | |
|         uses: EndBug/add-and-commit@v9
 | |
|         with:
 | |
|           author_name: Tipi CI
 | |
|           author_email: ci@runtipi.io
 | |
|           message: "Update app version [ready]"
 | |
|           commit: --no-verify
 | |
|           push: origin HEAD:${{ github.head_ref }}
 | |
| 
 | |
|   ci:
 | |
|     needs:
 | |
|       - update-config
 | |
|       - get-last-commit-message
 | |
|     if: contains(${{ needs.get-last-commit-message.outputs.last_commit_message }}, '[ready]')
 | |
|     runs-on: ubuntu-latest
 | |
|     steps:
 | |
|       - name: Checkout
 | |
|         uses: actions/checkout@v3
 | |
| 
 | |
|       - name: Install Node.js
 | |
|         uses: actions/setup-node@v3
 | |
|         with:
 | |
|           node-version: 18
 | |
| 
 | |
|       - uses: pnpm/action-setup@v2.0.1
 | |
|         name: Install pnpm
 | |
|         id: pnpm-install
 | |
|         with:
 | |
|           version: 8
 | |
|           run_install: false
 | |
| 
 | |
|       - name: Get pnpm store directory
 | |
|         id: pnpm-cache
 | |
|         run: |
 | |
|           echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT          
 | |
| 
 | |
|       - uses: actions/cache@v3
 | |
|         name: Setup pnpm cache
 | |
|         with:
 | |
|           path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
 | |
|           key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
 | |
|           restore-keys: |
 | |
|             ${{ runner.os }}-pnpm-store-            
 | |
| 
 | |
|       - name: Install dependencies
 | |
|         run: pnpm install
 | |
| 
 | |
|       - name: Run global tests
 | |
|         run: pnpm test
 | |
| 
 | |
|       - name: Run linter
 | |
|         run: pnpm run lint
 | |
| 
 | |
|       - name: Check bumped version
 | |
|         id: check-bumped-version
 | |
|         uses: actions/github-script@v4
 | |
|         with:
 | |
|           github-token: ${{ secrets.GITHUB_TOKEN }}
 | |
|           script: |
 | |
|             const semver = require('semver')
 | |
|             const { data } = await github.pulls.listFiles({
 | |
|               owner: context.repo.owner,
 | |
|               repo: context.repo.repo,
 | |
|               pull_number: context.issue.number
 | |
|             });
 | |
| 
 | |
|             const modifiedFiles = data.map(file => file.filename);
 | |
|             const filesInAppsFolder = modifiedFiles.filter(file => file.includes('apps/'))
 | |
| 
 | |
|             if (filesInAppsFolder.length < modifiedFiles.length) {
 | |
|               console.log('Not all files are in apps folder, skipping automerge')
 | |
|               core.setOutput('major_bump', 'true')
 | |
|               return
 | |
|             }
 | |
| 
 | |
|             const configs = modifiedFiles.filter(file => file.includes('config.json'))
 | |
|             let majorBump = 'false'
 | |
| 
 | |
|             for (const configFile of configs) {
 | |
|               const baseContent = await github.repos.getContent({
 | |
|                 owner: context.repo.owner,
 | |
|                 repo: context.repo.repo,
 | |
|                 path: configFile,
 | |
|                 ref: context.payload.pull_request.base.ref
 | |
|               });
 | |
|               const baseConfig = JSON.parse(Buffer.from(baseContent.data.content, 'base64').toString('utf-8'))
 | |
| 
 | |
|               const currentContent = await github.repos.getContent({
 | |
|                 owner: context.repo.owner,
 | |
|                 repo: context.repo.repo,
 | |
|                 path: configFile,
 | |
|                 ref: context.payload.pull_request.head.ref
 | |
|               });
 | |
|               const currentConfig = JSON.parse(Buffer.from(currentContent.data.content, 'base64').toString('utf-8'))
 | |
| 
 | |
|               const baseVersion = semver.coerce(baseConfig.version)
 | |
|               const currentVersion = semver.coerce(currentConfig.version)
 | |
| 
 | |
|               if (currentVersion?.major > baseVersion?.major) {
 | |
|                 console.log('Major bump detected, skipping automerge')
 | |
|                 majorBump = 'true'
 | |
|                 break
 | |
|               } 
 | |
|             }
 | |
| 
 | |
|             core.setOutput('major_bump', majorBump)            
 | |
| 
 | |
|       - name: Label this PR as "automerge" if major_bump is false
 | |
|         if: steps.check-bumped-version.outputs.major_bump == 'false'
 | |
|         uses: actions/github-script@v4
 | |
|         with:
 | |
|           github-token: ${{ secrets.PERSONAL_TOKEN }}
 | |
|           script: |
 | |
|             github.issues.addLabels({
 | |
|               issue_number: context.issue.number,
 | |
|               owner: context.repo.owner,
 | |
|               repo: context.repo.repo,
 | |
|               labels: ["automerge"]
 | |
|             })            
 |