1
+ @setup
2
+ require __DIR__.'/vendor/autoload.php';
3
+
4
+ $branch = "master";
5
+ $server = "bimbala.com";
6
+ $userAndServer = 'server@'. $server;
7
+ $repository = "bimbalacom/bimbalacom";
8
+ $baseDir = "/home/bimbala/bimbalacom";
9
+ $releasesDir = "{$baseDir}/releases";
10
+ $currentDir = "{$baseDir}/current";
11
+ $newReleaseName = date('Ymd-His');
12
+ $newReleaseDir = "{$releasesDir}/{$newReleaseName}";
13
+ $user = get_current_user();
14
+
15
+ function logMessage($message) {
16
+ return "echo '\033[32m" .$message. "\033[0m';\n";
17
+ }
18
+ @endsetup
19
+
20
+ @servers ([' local' => ' 127.0.0.1' , ' remote' => $userAndServer ] )
21
+
22
+ @macro (' deploy' )
23
+ startDeployment
24
+ cloneRepository
25
+ runComposer
26
+ generateAssets
27
+ updateSymlinks
28
+ optimizeInstallation
29
+ backupDatabase
30
+ migrateDatabase
31
+ blessNewRelease
32
+ cleanOldReleases
33
+ finishDeploy
34
+ @endmacro
35
+
36
+ @macro (' deploy-code' )
37
+ deployOnlyCode
38
+ @endmacro
39
+
40
+ @task (' startDeployment' , [' on' => ' local' ] )
41
+ {{ logMessage (" 🏃 Starting deployment..." ) } }
42
+ git checkout {{ $branch } }
43
+ git pull origin {{ $branch } }
44
+ @endtask
45
+
46
+ @task (' cloneRepository' , [' on' => ' remote' ] )
47
+ {{ logMessage (" 🌀 Cloning repository..." ) } }
48
+ [ -d {{ $releasesDir } } ] || mkdir {{ $releasesDir } } ;
49
+ cd {{ $releasesDir } }
50
+
51
+ # Create the release dir
52
+ mkdir {{ $newReleaseDir } }
53
+
54
+ # Clone the repo
55
+ git clone --depth 1 --branch {{ $branch } } git@github.com:{{ $repository } } {{ $newReleaseName } }
56
+
57
+ # Configure sparse checkout
58
+ cd {{ $newReleaseDir } }
59
+ git config core.sparsecheckout true
60
+ echo "*" > .git/info/sparse-checkout
61
+ echo "!storage" >> .git/info/sparse-checkout
62
+ echo "!public/build" >> .git/info/sparse-checkout
63
+ git read-tree -mu HEAD
64
+
65
+ # Mark release
66
+ cd {{ $newReleaseDir } }
67
+ echo "{{ $newReleaseName } } " > public/release-name.txt
68
+ @endtask
69
+
70
+ @task (' runComposer' , [' on' => ' remote' ] )
71
+ {{ logMessage (" 🚚 Running Composer..." ) } }
72
+ cd {{ $newReleaseDir } }
73
+ composer install --prefer-dist --no-scripts --no-dev -q -o
74
+ @endtask
75
+
76
+
77
+ @task (' generateAssets' , [' on' => ' remote' ] )
78
+ {{ logMessage (" 🌅 Generating assets..." ) } }
79
+ cd {{ $newReleaseDir } }
80
+ yarn run production --progress false
81
+ @endtask
82
+
83
+ @task (' updateSymlinks' , [' on' => ' remote' ] )
84
+ {{ logMessage (" 🔗 Updating symlinks to persistent data..." ) } }
85
+ # Remove the storage directory and replace with persistent data
86
+ rm -rf {{ $newReleaseDir } } /storage
87
+ cd {{ $newReleaseDir } }
88
+ ln -nfs {{ $baseDir } } /persistent/storage storage
89
+
90
+ # Import the environment config
91
+ cd {{ $newReleaseDir } }
92
+ ln -nfs {{ $baseDir } } /.env .env
93
+ @endtask
94
+
95
+ @task (' optimizeInstallation' , [' on' => ' remote' ] )
96
+ {{ logMessage (" ✨ Optimizing installation..." ) } }
97
+ cd {{ $newReleaseDir } }
98
+ php artisan clear-compiled
99
+ @endtask
100
+
101
+ @task (' backupDatabase' , [' on' => ' remote' ] )
102
+ {{ logMessage (" 📀 Backing up database..." ) } }
103
+ cd {{ $newReleaseDir } }
104
+ php artisan backup:run
105
+ @endtask
106
+
107
+ @task (' migrateDatabase' , [' on' => ' remote' ] )
108
+ {{ logMessage (" 🙈 Migrating database..." ) } }
109
+ cd {{ $newReleaseDir } }
110
+ php artisan migrate --force
111
+ php artisan db:seed --class MembersSeeder --force
112
+ @endtask
113
+
114
+ @task (' blessNewRelease' , [' on' => ' remote' ] )
115
+ {{ logMessage (" 🙏 Blessing new release..." ) } }
116
+ ln -nfs {{ $newReleaseDir } } {{ $currentDir } }
117
+ cd {{ $newReleaseDir } }
118
+
119
+ php artisan horizon:terminate
120
+ php artisan config:clear
121
+ php artisan cache:clear
122
+ php artisan config:cache
123
+ php artisan view:cache
124
+ #php artisan schedule-monitor:sync
125
+
126
+ sudo service php8.0-fpm restart
127
+ sudo supervisorctl restart all
128
+ @endtask
129
+
130
+ @task (' cleanOldReleases' , [' on' => ' remote' ] )
131
+ {{ logMessage (" 🚾 Cleaning up old releases..." ) } }
132
+ # Delete all but the 3 most recent.
133
+ cd {{ $releasesDir } }
134
+ ls -dt {{ $releasesDir } } /* | tail -n +4 | xargs -d "\n" sudo chown -R forge .
135
+ ls -dt {{ $releasesDir } } /* | tail -n +4 | xargs -d "\n" rm -rf
136
+ @endtask
137
+
138
+ @task (' finishDeploy' , [' on' => ' local' ] )
139
+ {{ logMessage (" 🚀 Application deployed!" ) } }
140
+ @endtask
141
+
142
+ @task (' deployOnlyCode' ,[' on' => ' remote' ] )
143
+ {{ logMessage (" 💻 Deploying code changes..." ) } }
144
+ cd {{ $currentDir } }
145
+ git pull origin {{ $branch } }
146
+ php artisan config:clear
147
+ php artisan cache:clear
148
+ php artisan config:cache
149
+ php artisan view:cache
150
+ sudo service php8.0-fpm restart
151
+ #php artisan schedule-monitor:sync
152
+ sudo supervisorctl restart all
153
+ @endtask
0 commit comments