diff --git a/.github/workflows/build_workflow.yml b/.github/workflows/build_workflow.yml index fd20c16..bbf79f2 100644 --- a/.github/workflows/build_workflow.yml +++ b/.github/workflows/build_workflow.yml @@ -1,128 +1,107 @@ name: CI/CD Build Workflow on: - push: - branches: [main] + push: + branches: [main] - pull_request: - branches: [main] + pull_request: + branches: [main] - workflow_dispatch: - -env: - CANCEL_OTHERS: true - PATHS_IGNORE: '["**/README.rst", "**/docs/**", "**/ISSUE_TEMPLATE/**", "**/pull_request_template.md", "**/.vscode/**"]' + workflow_dispatch: jobs: - pre-commit-hooks: - runs-on: ubuntu-latest - steps: - - id: skip_check - uses: fkirc/skip-duplicate-actions@master - with: - cancel_others: ${{ env.CANCEL_OTHERS }} - paths_ignore: ${{ env.PATHS_IGNORE }} - - - if: ${{ steps.skip_check.outputs.should_skip != 'true' }} - name: Checkout Code Repository - uses: actions/checkout@v3 - - - if: ${{ steps.skip_check.outputs.should_skip != 'true' }} - name: Set up Python 3.10 - uses: actions/setup-python@v3 - with: - python-version: "3.10" - - - if: ${{ steps.skip_check.outputs.should_skip != 'true' }} - # Run all pre-commit hooks on all the files. - # Getting only staged files can be tricky in case a new PR is opened - # since the action is run on a branch in detached head state - name: Install and Run Pre-commit - uses: pre-commit/action@v3.0.0 - - build: - name: Build (Python ${{ matrix.python-version }}) - runs-on: "ubuntu-latest" - defaults: - run: - shell: bash -l {0} - strategy: - matrix: - python-version: ["3.9", "3.10", "3.11"] - steps: - - id: skip_check - uses: fkirc/skip-duplicate-actions@master - with: - cancel_others: ${{ env.CANCEL_OTHERS }} - paths_ignore: ${{ env.PATHS_IGNORE }} - do_not_skip: '["push", "workflow_dispatch"]' - - - if: ${{ steps.skip_check.outputs.should_skip != 'true' }} - uses: actions/checkout@v3 - - - if: ${{ steps.skip_check.outputs.should_skip != 'true' }} - name: Cache Conda - uses: actions/cache@v3 - env: - # Increase this value to reset cache if conda-env/ci.yml has not changed in the workflow - CACHE_NUMBER: 0 - with: - path: ~/conda_pkgs_dir - key: - conda-${{ runner.os }}--${{ runner.arch }}--${{ - steps.get-date.outputs.today }}-${{ - hashFiles('conda-env/dev.yml') }}-${{ env.CACHE_NUMBER}} - - - if: ${{ steps.skip_check.outputs.should_skip != 'true' }} - name: Set up Conda Environment - uses: conda-incubator/setup-miniconda@v2 - with: - activate-environment: "pcmdi_utils_dev" - miniforge-variant: Mambaforge - miniforge-version: latest - use-mamba: true - mamba-version: "*" - environment-file: conda-env/dev.yml - channel-priority: strict - auto-update-conda: true - # IMPORTANT: This needs to be set for caching to work properly! - use-only-tar-bz2: true - python-version: ${{ matrix.python-version }} - - # Refresh the cache every 24 hours to avoid inconsistencies of package versions - # between the CI pipeline and local installations. - - if: ${{ steps.skip_check.outputs.should_skip != 'true' }} - id: get-date - name: Get Date - run: echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT - shell: bash - - - if: ${{ steps.skip_check.outputs.should_skip != 'true' }} - id: cache - name: Cache Conda env - uses: actions/cache@v3 - with: - path: ${{ env.CONDA }}/envs - key: - conda-${{ runner.os }}-${{ runner.arch }}-${{ matrix.python-version }}-${{ - steps.get-date.outputs.today }}-${{hashFiles('conda-env/dev.yml') }}-${{ env.CACHE_NUMBER}} - env: - # Increase this value to reset cache if conda-env/ci.yml has not changed in the workflow - CACHE_NUMBER: 0 - - - if: ${{ steps.cache.outputs.cache-hit != 'true' }} - name: Update environment - run: - mamba env update -n pcmdi_utils_dev -f conda-env/dev.yml - - - - if: ${{ steps.skip_check.outputs.should_skip != 'true' }} - name: Install Package to the CI Environment - # Source: https://github.com/conda/conda-build/issues/4251#issuecomment-1053460542 - run: | - python -m pip install --no-build-isolation --no-deps -e . - - - if: ${{ steps.skip_check.outputs.should_skip != 'true' }} - name: Run Tests - run: | - pytest + check-jobs-to-skip: + runs-on: ubuntu-latest + outputs: + should_skip: ${{ steps.skip_check.outputs.should_skip }} + steps: + - id: skip_check + uses: fkirc/skip-duplicate-actions@master + with: + cancel_others: true + paths_ignore: '["**/README.md", "**/docs/**", "**/ISSUE_TEMPLATE/**", "**/pull_request_template.md", "**/.vscode/**"]' + + pre-commit-hooks: + needs: check-jobs-to-skip + if: ${{ needs.check-jobs-to-skip.outputs.should_skip != 'true'}} || ${{ github.event_name == 'push' }} + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/setup-node@v3 + with: + node-version: '16' + - name: Checkout Code Repository + uses: actions/checkout@v3 + with: + node-version: '16' + - name: Set up Python + uses: actions/setup-python@v4 + with: + node-version: '16' + python-version: '3.10' + # Run all pre-commit hooks on all the files. + # Getting only staged files can be tricky in case a new PR is opened + # since the action is run on a branch in detached head state + - name: Install and Run Pre-commit + uses: pre-commit/action@v3.0.0 + with: + node-version: '16' + + build: + needs: check-jobs-to-skip + if: ${{ needs.check-jobs-to-skip.outputs.should_skip != 'true'}} || ${{ github.event_name == 'push' }} + runs-on: ubuntu-latest + defaults: + run: + shell: bash -l {0} + timeout-minutes: 10 + steps: + - uses: actions/setup-node@v3 + with: + node-version: '16' + - uses: actions/checkout@v3 + + - name: Set up Conda Environment + uses: conda-incubator/setup-miniconda@v2 + with: + activate-environment: "pcmdi_utils_dev" + miniforge-variant: Mambaforge + miniforge-version: latest + use-mamba: true + mamba-version: "*" + channel-priority: strict + auto-update-conda: true + + # Used for refreshing the cache every 24 hours to avoid inconsistencies of package + # versions between the CI pipeline and local installations. + - name: Get Date + id: get-date + run: echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT + shell: bash + + - name: Cache Conda + uses: actions/cache@v3 + with: + node-version: '16' + path: ${{ env.CONDA }}/envs + key: + conda-${{ runner.os }}--${{ runner.arch }}--${{ + steps.get-date.outputs.today }}-${{ + hashFiles('conda-env/dev.yml') }}-${{ env.CACHE_NUMBER}} + env: + # Increase this value to reset cache if conda/dev.yml has not changed in the workflow + CACHE_NUMBER: 0 + + - name: Update environment + run: + mamba env update -n pcmdi_utils_dev -f conda-env/dev.yml + if: steps.cache.outputs.cache-hit != 'true' + + - name: Install pcmdi_utils + # Source: https://github.com/conda/conda-build/issues/4251#issuecomment-1053460542 + run: | + python -m pip install --no-build-isolation --no-deps -e . + + - name: Run Tests + run: | + pytest \ No newline at end of file