From db8f5754a6e780e982e8e70ff6537a37e07f4e53 Mon Sep 17 00:00:00 2001 From: Daniel Gak Anagrov Date: Mon, 6 Oct 2025 13:23:51 +0200 Subject: [PATCH] feat(ci): skip builds on pr when no files modified (#5637) * feat: skip builds on pr * feat: skipping utils too --- .github/workflows/builds.yml | 41 ++++++++++++ .github/workflows/pull-request.yml | 87 +++++++++++++++++++++++- .github/workflows/release.yml | 1 - .github/workflows/tests.yml | 103 ++++++++++------------------- 4 files changed, 160 insertions(+), 72 deletions(-) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index bc4b26f9d..9fa76995b 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -23,6 +23,38 @@ on: required: false type: boolean default: false + SKIP_SERVER: + required: false + default: false + type: boolean + SKIP_FRONTEND_2: + required: false + default: false + type: boolean + SKIP_PREVIEW_SERVICE: + required: false + default: false + type: boolean + SKIP_WEBHOOK_SERVICE: + required: false + default: false + type: boolean + SKIP_FILEIMPORT_SERVICE: + required: false + default: false + type: boolean + SKIP_IFC_IMPORT_SERVICE: + required: false + default: false + type: boolean + SKIP_MONITOR_DEPLOYMENT: + required: false + default: false + type: boolean + SKIP_UTILS: + required: false + default: false + type: boolean secrets: DATADOG_API_KEY: required: true @@ -33,6 +65,7 @@ jobs: docker-build-server: runs-on: blacksmith-4vcpu-ubuntu-2404 name: Server + if: ${{ inputs.SKIP_SERVER == 'false' }} steps: - name: Login to Helm Chart & Container Image Registry uses: docker/login-action@v3 @@ -63,6 +96,7 @@ jobs: docker-build-frontend2: runs-on: blacksmith-8vcpu-ubuntu-2404 name: Frontend2 + if: ${{ inputs.SKIP_FRONTEND_2 == 'false' }} steps: - name: Login to Helm Chart & Container Image Registry uses: docker/login-action@v3 @@ -92,6 +126,7 @@ jobs: docker-build-preview-service: runs-on: blacksmith-4vcpu-ubuntu-2404 name: Preview service + if: ${{ inputs.SKIP_PREVIEW_SERVICE == 'false' }} steps: - name: Login to Helm Chart & Container Image Registry uses: docker/login-action@v3 @@ -111,6 +146,7 @@ jobs: docker-build-webhook-service: runs-on: blacksmith-4vcpu-ubuntu-2404 name: Webhook service + if: ${{ inputs.SKIP_WEBHOOK_SERVICE == 'false' }} steps: - name: Login to Helm Chart & Container Image Registry uses: docker/login-action@v3 @@ -130,6 +166,7 @@ jobs: docker-build-fileimport-service: runs-on: blacksmith-4vcpu-ubuntu-2404 name: File import service + if: ${{ inputs.SKIP_FILEIMPORT_SERVICE == 'false' }} steps: - name: Login to Helm Chart & Container Image Registry uses: docker/login-action@v3 @@ -149,6 +186,7 @@ jobs: docker-build-ifc-import-service: runs-on: blacksmith-4vcpu-ubuntu-2404 name: IFC import service + if: ${{ inputs.SKIP_IFC_IMPORT_SERVICE == 'false' }} steps: - name: Login to Helm Chart & Container Image Registry uses: docker/login-action@v3 @@ -168,6 +206,7 @@ jobs: docker-build-test-deploy: runs-on: blacksmith-4vcpu-ubuntu-2404 name: Test deploy util + if: ${{ inputs.SKIP_UTILS == 'false' }} steps: - name: Login to Helm Chart & Container Image Registry uses: docker/login-action@v3 @@ -187,6 +226,7 @@ jobs: docker-build-monitor-deployment: runs-on: blacksmith-4vcpu-ubuntu-2404 name: monitor container + if: ${{ inputs.SKIP_MONITOR_DEPLOYMENT == 'false' }} steps: - name: Login to Helm Chart & Container Image Registry uses: docker/login-action@v3 @@ -206,6 +246,7 @@ jobs: docker-build-docker-compose-ingress: runs-on: blacksmith-4vcpu-ubuntu-2404 name: Docker compose ingress + if: ${{ inputs.SKIP_UTILS == 'false' }} steps: - name: Login to Helm Chart & Container Image Registry uses: docker/login-action@v3 diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 983cd0396..a27337f49 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -11,14 +11,85 @@ jobs: name: Get version uses: ./.github/workflows/get-version.yml + changes: + name: Get modified files + runs-on: blacksmith + outputs: + server: ${{ steps.changes.outputs.server }} + frontend-2: ${{ steps.changes.outputs.frontend-2 }} + preview-service: ${{ steps.changes.outputs.preview-service }} + viewer: ${{ steps.changes.outputs.viewer }} + ui-components: ${{ steps.changes.outputs.ui-components }} + objectsender: ${{ steps.changes.outputs.objectsender }} + shared: ${{ steps.changes.outputs.shared }} + steps: + - uses: actions/checkout@v4.2.2 + with: + fetch-depth: 0 + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 + id: changes + with: + filters: | + server: + - 'packages/server/**' + - 'packages/shared/**' + - 'packages/objectloader2/**' + frontend-2: + - 'packages/frontend-2/**' + - 'packages/shared/**' + - 'packages/tailwind-theme/**' + - 'packages/ui-components/**' + - 'packages/ui-components-nuxt/**' + - 'packages/viewer/**' + - 'packages/objectloader2/**' + preview-service: + - 'packages/preview-service/**' + - 'packages/objectloader2/**' + - 'packages/preview-frontend/**' + - 'packages/shared/**' + - 'packages/viewer/**' + viewer: + - 'packages/viewer/**' + - 'packages/shared/**' + ui-components: + - 'packages/ui-components/**' + - 'packages/shared/**' + objectsender: + - 'packages/objectsender/**' + - 'packages/shared/**' + shared: + - 'packages/shared/**' + webhook-service: + - 'packages/webhook-service/**' + - 'packages/shared/**' + fileimport-service: + - 'packages/fileimport-service/**' + - 'packages/shared/**' + ifc-import-service: + - 'packages/ifc-import-service/**' + - 'packages/shared/**' + monitor-deployment: + - 'packages/monitor-deployment/**' + - 'packages/shared/**' + utils: + - 'utils/**' + tests: - needs: [get-version] + needs: [get-version, changes] uses: ./.github/workflows/tests.yml - with: {} + with: + # skipping logic only on prs + SKIP_SERVER: ${{ needs.changes.outputs.server == 'false' }} + SKIP_FRONTEND_2: ${{ needs.changes.outputs.frontend-2 == 'false' }} + SKIP_PREVIEW_SERVICE: ${{ needs.changes.outputs.preview-service == 'false' }} + SKIP_VIEWER: ${{ needs.changes.outputs.viewer == 'false' }} + SKIP_UI_COMPONENTS: ${{ needs.changes.outputs.ui-components == 'false' }} + SKIP_OBJECTSENDER: ${{ needs.changes.outputs.objectsender == 'false' }} + SKIP_SHARED: ${{ needs.changes.outputs.shared == 'false' }} secrets: inherit builds: - needs: [get-version] + needs: [get-version, changes] uses: ./.github/workflows/builds.yml with: IMAGE_VERSION_TAG: ${{ needs.get-version.outputs.IMAGE_VERSION_TAG }} @@ -27,6 +98,16 @@ jobs: # REGISTRY_DOMAIN, REGISTRY_USERNAME, REGISTRY_TOKEN must be configured to match the below IMAGE_PREFIX IMAGE_PREFIX: 'ghcr.io/specklesystems' PUBLISH: false # do not publish the sourcemaps or include the version in frontend-2 builds for pull requests + + # skipping logic only on prs + SKIP_SERVER: ${{ needs.changes.outputs.server == 'false' }} + SKIP_FRONTEND_2: ${{ needs.changes.outputs.frontend-2 == 'false' }} + SKIP_PREVIEW_SERVICE: ${{ needs.changes.outputs.preview-service == 'false' }} + SKIP_WEBHOOK_SERVICE: ${{ needs.changes.outputs.webhook-service == 'false' }} + SKIP_FILEIMPORT_SERVICE: ${{ needs.changes.outputs.fileimport-service == 'false' }} + SKIP_IFC_IMPORT_SERVICE: ${{ needs.changes.outputs.ifc-import-service == 'false' }} + SKIP_MONITOR_DEPLOYMENT: ${{ needs.changes.outputs.monitor-deployment == 'false' }} + SKIP_UTILS: ${{ needs.changes.outputs.utils == 'false' }} secrets: DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }} REGISTRY_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index eba902a30..5d59a0679 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,7 +28,6 @@ jobs: uses: ./.github/workflows/tests.yml with: CONTINUE_ON_ERROR: ${{ startsWith(github.ref, 'refs/heads/testing') }} # allows releasing on testing even if test fail - DISABLE_SKIPPING: ${{ startsWith(github.ref, 'refs/heads/main') }} # disable test skip on main secrets: inherit builds: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4f8da8345..8a3302345 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,10 +7,35 @@ on: required: false default: false type: boolean - DISABLE_SKIPPING: + SKIP_SERVER: required: false default: false type: boolean + SKIP_FRONTEND_2: + required: false + default: false + type: boolean + SKIP_PREVIEW_SERVICE: + required: false + default: false + type: boolean + SKIP_VIEWER: + required: false + default: false + type: boolean + SKIP_UI_COMPONENTS: + required: false + default: false + type: boolean + SKIP_OBJECTSENDER: + required: false + default: false + type: boolean + SKIP_SHARED: + required: false + default: false + type: boolean + secrets: LICENSE_TOKEN: required: true @@ -26,55 +51,6 @@ on: required: true jobs: - changes: - name: Get modified files - runs-on: blacksmith - outputs: - server: ${{ steps.changes.outputs.server }} - frontend-2: ${{ steps.changes.outputs.frontend-2 }} - preview-service: ${{ steps.changes.outputs.preview-service }} - viewer: ${{ steps.changes.outputs.viewer }} - ui-components: ${{ steps.changes.outputs.ui-components }} - objectsender: ${{ steps.changes.outputs.objectsender }} - shared: ${{ steps.changes.outputs.shared }} - steps: - - uses: actions/checkout@v4.2.2 - with: - fetch-depth: 0 - - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 - id: changes - with: - filters: | - server: - - 'packages/server/**' - - 'packages/shared/**' - - 'packages/objectloader2/**' - frontend-2: - - 'packages/frontend-2/**' - - 'packages/shared/**' - - 'packages/tailwind-theme/**' - - 'packages/ui-components/**' - - 'packages/ui-components-nuxt/**' - - 'packages/viewer/**' - - 'packages/objectloader2/**' - preview-service: - - 'packages/preview-service/**' - - 'packages/objectloader2/**' - - 'packages/preview-frontend/**' - - 'packages/shared/**' - - 'packages/viewer/**' - viewer: - - 'packages/viewer/**' - - 'packages/shared/**' - ui-components: - - 'packages/ui-components/**' - - 'packages/shared/**' - objectsender: - - 'packages/objectsender/**' - - 'packages/shared/**' - shared: - - 'packages/shared/**' - lint-and-prettier: name: Lint and prettier runs-on: blacksmith-4vcpu-ubuntu-2404 @@ -120,8 +96,7 @@ jobs: test-frontend-2: name: Frontend runs-on: blacksmith-4vcpu-ubuntu-2404 - needs: changes - if: ${{ needs.changes.outputs.frontend-2 == 'true' || inputs.DISABLE_SKIPPING }} + if: ${{ inputs.SKIP_FRONTEND_2 == 'false' }} continue-on-error: ${{ inputs.CONTINUE_ON_ERROR }} steps: - uses: actions/checkout@v4.2.2 @@ -143,8 +118,7 @@ jobs: test-viewer: name: Viewer runs-on: blacksmith-4vcpu-ubuntu-2404 - needs: changes - if: ${{ needs.changes.outputs.viewer == 'true' || inputs.DISABLE_SKIPPING }} + if: ${{ inputs.SKIP_VIEWER == 'false' }} continue-on-error: ${{ inputs.CONTINUE_ON_ERROR }} steps: - uses: actions/checkout@v4.2.2 @@ -175,8 +149,7 @@ jobs: test-shared: name: Shared runs-on: blacksmith-4vcpu-ubuntu-2404 - needs: changes - if: ${{ needs.changes.outputs.shared == 'true' || inputs.DISABLE_SKIPPING }} + if: ${{ inputs.SKIP_SHARED == 'false' }} continue-on-error: ${{ inputs.CONTINUE_ON_ERROR }} steps: - uses: actions/checkout@v4.2.2 @@ -217,8 +190,7 @@ jobs: test-objectsender: name: Object Sender runs-on: blacksmith-4vcpu-ubuntu-2404 - needs: changes - if: ${{ needs.changes.outputs.objectsender == 'true' || inputs.DISABLE_SKIPPING }} + if: ${{ inputs.SKIP_OBJECTSENDER == 'false' }} continue-on-error: ${{ inputs.CONTINUE_ON_ERROR }} steps: - uses: actions/checkout@v4.2.2 @@ -246,8 +218,7 @@ jobs: test-ui-components: name: UI Components runs-on: blacksmith-4vcpu-ubuntu-2404 - needs: changes - if: ${{ needs.changes.outputs.ui-components == 'true' || inputs.DISABLE_SKIPPING }} + if: ${{ inputs.SKIP_UI_COMPONENTS == 'false' }} continue-on-error: ${{ inputs.CONTINUE_ON_ERROR }} steps: - uses: actions/checkout@v4.2.2 @@ -278,8 +249,7 @@ jobs: test-preview-service: name: Preview service runs-on: blacksmith-4vcpu-ubuntu-2404 - needs: changes - if: ${{ needs.changes.outputs.preview-service == 'true' || inputs.DISABLE_SKIPPING }} + if: ${{ inputs.SKIP_PREVIEW_SERVICE == 'false' }} continue-on-error: ${{ inputs.CONTINUE_ON_ERROR }} container: image: ghcr.io/specklesystems/speckle-ubuntu-chromium:latest @@ -332,8 +302,7 @@ jobs: test-server: name: Server runs-on: blacksmith-8vcpu-ubuntu-2404 - needs: changes - if: ${{ needs.changes.outputs.server == 'true' || inputs.DISABLE_SKIPPING }} + if: ${{ inputs.SKIP_SERVER == 'false' }} continue-on-error: ${{ inputs.CONTINUE_ON_ERROR }} services: redis: @@ -432,8 +401,7 @@ jobs: test-server-no-ff: name: Server no ff runs-on: blacksmith-8vcpu-ubuntu-2404 - needs: changes - if: ${{ needs.changes.outputs.server == 'true' || inputs.DISABLE_SKIPPING }} + if: ${{ inputs.SKIP_SERVER == 'false' }} continue-on-error: ${{ inputs.CONTINUE_ON_ERROR }} services: redis: @@ -521,8 +489,7 @@ jobs: test-server-multiregion: name: Server multiregion - needs: changes - if: ${{ needs.changes.outputs.server == 'true' || inputs.DISABLE_SKIPPING }} + if: ${{ inputs.SKIP_SERVER == 'false' }} continue-on-error: ${{ inputs.CONTINUE_ON_ERROR }} runs-on: blacksmith-4vcpu-ubuntu-2404 services: