@@ -2,23 +2,79 @@ const { execSync } = require('child_process');
2
2
3
3
// Check if there are changes in the website directory
4
4
function hasWebsiteChanges ( ) {
5
+ if ( process . env . FORCE_BUILD ) {
6
+ return false ;
7
+ }
8
+
5
9
try {
6
- // Get the list of changed files in the current commit compared to the base branch
7
- const baseBranch = process . env . BASE_BRANCH || 'main' ;
8
- const changedFiles = execSync (
9
- `git diff --name-only origin/${ baseBranch } ...HEAD` ,
10
- { encoding : 'utf8' } ,
11
- ) ;
10
+ let changedFiles = '' ;
11
+
12
+ // Try multiple strategies to detect changes
13
+ const strategies = [
14
+ // Strategy 1: Compare with Netlify's CACHED_COMMIT_REF if available
15
+ ( ) => {
16
+ if ( process . env . CACHED_COMMIT_REF ) {
17
+ return execSync (
18
+ `git diff --name-only ${ process . env . CACHED_COMMIT_REF } ...HEAD` ,
19
+ { encoding : 'utf8' }
20
+ ) ;
21
+ }
22
+ return null ;
23
+ } ,
24
+
25
+ // Strategy 2: Use git diff with HEAD~1 (compare with previous commit)
26
+ ( ) => {
27
+ return execSync ( 'git diff --name-only HEAD~1...HEAD' , { encoding : 'utf8' } ) ;
28
+ } ,
29
+
30
+ // Strategy 3: Check git status for uncommitted changes
31
+ ( ) => {
32
+ return execSync ( 'git status --porcelain' , { encoding : 'utf8' } ) ;
33
+ } ,
34
+
35
+ // Strategy 4: Fetch and compare with origin/main
36
+ ( ) => {
37
+ execSync ( 'git fetch origin main --depth=1' , { stdio : 'ignore' } ) ;
38
+ return execSync ( 'git diff --name-only origin/main...HEAD' , { encoding : 'utf8' } ) ;
39
+ }
40
+ ] ;
41
+
42
+ // Try each strategy until one works
43
+ for ( const strategy of strategies ) {
44
+ try {
45
+ const result = strategy ( ) ;
46
+ if ( result !== null ) {
47
+ changedFiles = result ;
48
+ break ;
49
+ }
50
+ } catch ( e ) {
51
+ // Continue to next strategy
52
+ continue ;
53
+ }
54
+ }
55
+
56
+ if ( ! changedFiles ) {
57
+ console . log ( 'Could not determine changes using any strategy, allowing build to proceed' ) ;
58
+ return true ;
59
+ }
60
+
61
+ console . log ( 'Changed files detected:' , changedFiles . trim ( ) ) ;
12
62
13
63
// Check if any of the changed files are in the website directory
14
64
const websiteChanges = changedFiles
15
65
. split ( '\n' )
16
- . filter ( ( file ) => file . trim ( ) && file . startsWith ( 'apps/website/' ) ) ;
66
+ . filter ( ( file ) => {
67
+ const trimmedFile = file . trim ( ) ;
68
+ // Handle git status format (files may have status prefixes like M, A, D)
69
+ const cleanFile = trimmedFile . replace ( / ^ [ M A D R C U ? ! \s ] + / , '' ) ;
70
+ return cleanFile && cleanFile . startsWith ( 'apps/website/' ) ;
71
+ } ) ;
17
72
73
+ console . log ( 'Website changes:' , websiteChanges ) ;
18
74
return websiteChanges . length > 0 ;
19
75
} catch ( error ) {
20
- // If we can't determine changes, allow the build to proceed
21
- console . log ( 'Could not determine changes, allowing build to proceed ' ) ;
76
+ console . log ( 'Error determining changes:' , error . message ) ;
77
+ console . log ( 'Allowing build to proceed due to error ' ) ;
22
78
return true ;
23
79
}
24
80
}
0 commit comments