From 6b79ad7e58c75422fbd57731724ca1efabcf66c3 Mon Sep 17 00:00:00 2001 From: Nabeel S Date: Mon, 10 Feb 2020 12:39:59 -0500 Subject: [PATCH] Auto-update functionality #449 (#544) * Convert tar to zip file for updater * Add update section to maintenance --- .travis.yml | 1 + .travis/deploy_script.sh | 12 +----- .../Admin/MaintenanceController.php | 42 +++++++++++++++++-- app/Http/Routes/admin.php | 6 ++- config/self-update.php | 2 +- .../views/admin/maintenance/index.blade.php | 6 +++ .../views/admin/maintenance/update.blade.php | 22 ++++++++++ 7 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 resources/views/admin/maintenance/update.blade.php diff --git a/.travis.yml b/.travis.yml index e919cc66..d473b6c4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,6 +30,7 @@ install: - php --version - mysql --version - composer install --dev --no-interaction --verbose + - npm i tar-to-zip -g - cp .travis/env.travis.php env.php - cp .travis/phpunit.travis.xml phpunit.xml diff --git a/.travis/deploy_script.sh b/.travis/deploy_script.sh index 4d74bbab..73d79c1b 100755 --- a/.travis/deploy_script.sh +++ b/.travis/deploy_script.sh @@ -109,21 +109,13 @@ if [ "$TRAVIS" = "true" ]; then cd /tmp tar -czf $TAR_NAME -C $TRAVIS_BUILD_DIR/../ phpvms sha256sum $TAR_NAME >"$TAR_NAME.sha256" - - # Create zip https://stackoverflow.com/a/6301947 - for f in *.tar.gz;\ - do rm -rf ${f%.tar.gz} ;\ - mkdir ${f%.tar.gz} ;\ - tar -C ${f%.tar.gz} zxvf $f ;\ - zip -r ${f%.tar.gz} $f.zip ;\ - rm -rf ${f%.tar.gz} ;\ - done + tar2zip $TAR_NAME echo "Uploading to S3" mkdir -p $TRAVIS_BUILD_DIR/build cd $TRAVIS_BUILD_DIR/build - mv "/tmp/$TAR_NAME" "/tmp/$TAR_NAME.sha256" . + mv "/tmp/$TAR_NAME" "/tmp/$ZIP_NAME" "/tmp/$TAR_NAME.sha256" . artifacts upload --target-paths "/" $TAR_NAME $TRAVIS_BUILD_DIR/VERSION $TAR_NAME.sha256 # Upload the version for a tagged release. Move to a version file in different diff --git a/app/Http/Controllers/Admin/MaintenanceController.php b/app/Http/Controllers/Admin/MaintenanceController.php index 92264e2d..45fb9274 100644 --- a/app/Http/Controllers/Admin/MaintenanceController.php +++ b/app/Http/Controllers/Admin/MaintenanceController.php @@ -3,18 +3,28 @@ namespace App\Http\Controllers\Admin; use App\Contracts\Controller; +use App\Repositories\KvpRepository; use App\Services\CronService; +use Codedge\Updater\UpdaterManager; use Illuminate\Http\Request; use Illuminate\Support\Facades\Artisan; +use Illuminate\Support\Facades\Log; use Laracasts\Flash\Flash; class MaintenanceController extends Controller { private $cronSvc; + private $kvpRepo; + private $updateManager; - public function __construct(CronService $cronSvc) - { + public function __construct( + CronService $cronSvc, + KvpRepository $kvpRepo, + UpdaterManager $updateManager + ) { $this->cronSvc = $cronSvc; + $this->kvpRepo = $kvpRepo; + $this->updateManager = $updateManager; } public function index() @@ -22,6 +32,8 @@ class MaintenanceController extends Controller return view('admin.maintenance.index', [ 'cron_path' => $this->cronSvc->getCronExecString(), 'cron_problem_exists' => $this->cronSvc->cronProblemExists(), + 'new_version' => $this->kvpRepo->get('new_version_available', false), + 'new_version_tag' => $this->kvpRepo->get('latest_version_tag'), ]); } @@ -30,7 +42,7 @@ class MaintenanceController extends Controller * * @param \Illuminate\Http\Request $request * - * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + * @return mixed */ public function cache(Request $request) { @@ -57,4 +69,28 @@ class MaintenanceController extends Controller Flash::success('Cache cleared!'); return redirect(route('admin.maintenance.index')); } + + /** + * Update the phpVMS install + * + * @param \Illuminate\Http\Request $request + * + * @return mixed + */ + public function update(Request $request) + { + $new_version_avail = $this->kvpRepo->get('new_version_available', false); + if (!$new_version_avail) { + Flash::error('A newer version is not available!'); + return redirect(route('admin.maintenance.index')); + } + + $new_version_tag = $this->kvpRepo->get('latest_version_tag'); + Log::info('Attempting to update to '.$new_version_tag); + + $this->updateManager->source()->update($new_version_tag); + + Flash::success('phpVMS was updated!'); + return redirect(route('/update')); + } } diff --git a/app/Http/Routes/admin.php b/app/Http/Routes/admin.php index 976fe799..ae02c0d3 100644 --- a/app/Http/Routes/admin.php +++ b/app/Http/Routes/admin.php @@ -157,10 +157,14 @@ Route::group( ->name('maintenance.index') ->middleware('ability:admin,maintenance'); - Route::match(['post'], 'maintenance', 'MaintenanceController@cache') + Route::match(['post'], 'maintenance/cache', 'MaintenanceController@cache') ->name('maintenance.cache') ->middleware('ability:admin,maintenance'); + Route::match(['post'], 'maintenance/update', 'MaintenanceController@update') + ->name('maintenance.update') + ->middleware('ability:admin,maintenance'); + // subfleet Route::get('subfleets/export', 'SubfleetController@export') ->name('subfleets.export') diff --git a/config/self-update.php b/config/self-update.php index f19d523b..48656de0 100644 --- a/config/self-update.php +++ b/config/self-update.php @@ -17,7 +17,7 @@ return [ 'http' => [ 'type' => 'http', 'repository_url' => 'http://downloads.phpvms.net', - 'pkg_filename_format' => 'phpvms-v_VERSION_.zip', + 'pkg_filename_format' => 'phpvms-_VERSION_.zip', 'download_path' => env('SELF_UPDATER_DOWNLOAD_PATH', '/tmp'), 'private_access_token' => env('SELF_UPDATER_HTTP_PRIVATE_ACCESS_TOKEN', ''), ], diff --git a/resources/views/admin/maintenance/index.blade.php b/resources/views/admin/maintenance/index.blade.php index 5771abf4..6fd62c49 100644 --- a/resources/views/admin/maintenance/index.blade.php +++ b/resources/views/admin/maintenance/index.blade.php @@ -4,6 +4,12 @@ @section('content') @include('flash::message') +
+
+ @include('admin.maintenance.update') +
+
+
@include('admin.maintenance.cron') diff --git a/resources/views/admin/maintenance/update.blade.php b/resources/views/admin/maintenance/update.blade.php new file mode 100644 index 00000000..5a32e8d4 --- /dev/null +++ b/resources/views/admin/maintenance/update.blade.php @@ -0,0 +1,22 @@ +
+
+
+
+  Update +
+
+
+ + @if ($new_version) +

An update to version {{ $new_version_tag }} is available.

+ {{ Form::open(['route' => 'admin.maintenance.update']) }} + {{ Form::button('Update', ['type' => 'submit', 'class' => 'btn btn-success']) }} + {{ Form::close() }} + @else +

There is no new version available

+ @endif +
+
+
+
+