I try to create a pipeline with if conditions.
When I try to change a file or folder in foo2 or foo folder, some tests should be skipped. But all steps are running instead of skipping some tests. Because I only changed files in a folder. Not both of them.
I'm using this action for paths changes filter: dorny/paths-filter@v2
For example '# minify files for each project' part in the YAML file is not working properly. When I change just one folder, all steps of that part are working. But it should not.
My File directory is like this:
github
- workflows
- main.yml
- workflows
foo
js
.bc-global.js
live
.global-bundle.js
.script-bundle.js
scripts
.script1.js
.script2.js
.script3.js
Foo2 folder's directory same as the foo folder.
This is my YAML file:
name: Upload to S3
on:
push:
branches:
- test-s3
paths:
- "foo/js/bc-global.js"
- "foo/js/scripts/**.js"
- "foo2/js/lc-global.js"
- "foo2/js/scripts/**.js"
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/checkout@v2
- uses: dorny/paths-filter@v2
id: changes
with:
filters: |
foo:
- 'foo/js/bc-global.js'
- 'foo/js/scripts/**.js'
foo2:
- 'foo2/js/lc-global.js'
- 'foo2/js/scripts/**.js'
- name: Install node
uses: actions/setup-node@v3
with:
node-version: 16.13.0
registry-url: "https://registry.npmjs.org"
- name: Install uglify-js
run: npm install uglify-js -g
# minify files for each project
- name: minify script files for foo
if: steps.changes.outputs.foo == 'true'
run: uglifyjs foo/js/scripts/**.js -o foo/js/live/scripts-bundle.js
- name: minify global file for foo
if: steps.changes.outputs.foo == 'true'
run: uglifyjs foo/js/bc-global.js -o foo/js/live/global-bundle.js
- name: minify script files for foo2
if: steps.changes.outputs.foo2 == 'true'
run: uglifyjs foo2/js/scripts/**.js -o foo2/js/live/scripts-bundle.js
- name: minify global file for foo2
if: steps.changes.outputs.foo2 == 'true'
run: uglifyjs foo2/js/lc-global.js -o foo2/js/live/global-bundle.js
# Auto committing
- name: Auto committing minified files
uses: stefanzweifel/git-auto-commit-action@v4
with:
file_pattern: "*.js"
commit_message: "Github Action: Auto Minified JS files"
branch: ${{ github.ref }}
# Deploy for foo
- name: Deploy to S3 for foo
if: steps.changes.outputs.foo == 'true'
uses: jakejarvis/s3-sync-action@master
with:
args: --follow-symlinks --cache-control max-age=600
env:
AWS_S3_BUCKET: ${{ secrets.AWS_BUCKET_NAME }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
SOURCE_DIR: "foo/js/live"
DEST_DIR: "foo/pages/assets/js/test/"
# Deploy for foo2
- name: Deploy to S3 for foo2
if: steps.changes.outputs.foo2 == 'true'
uses: jakejarvis/s3-sync-action@master
with:
args: --follow-symlinks --cache-control max-age=600
env:
AWS_S3_BUCKET: ${{ secrets.AWS_BUCKET_NAME }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
SOURCE_DIR: "foo2/js/live"
DEST_DIR: "foo2/pages/assets/js/test/"
CodePudding user response:
It solved. I added this line(base) above the filters section:
with:
base: ${{ github.ref }}
filters: |
foo:
- 'foo/js/bc-global.js'
- 'foo/js/scripts/**.js'
foo2:
- 'foo2/js/lc-global.js'
- 'foo2/js/scripts/**.js'