Passed
Push — stage ( a50aa9...cec715 )
by Jon
08:17
created

Publish   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 6
dl 0
loc 80
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace App\Jobs;
4
5
use App\Exceptions\GithubAuthenticationException;
6
use App\Models\Release;
7
use App\Notifications\Frontend\ReleaseWasPublished;
8
use App\Services\Publish\Git;
9
use App\Services\Publish\GitHubService;
10
use Illuminate\Bus\Queueable;
11
use Illuminate\Contracts\Queue\ShouldQueue;
12
use Illuminate\Foundation\Bus\Dispatchable;
13
use Illuminate\Queue\InteractsWithQueue;
14
use Illuminate\Queue\SerializesModels;
15
use Illuminate\Support\Carbon;
16
use Illuminate\Support\Facades\Redirect;
17
18
class Publish implements ShouldQueue
19
{
20
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
21
    /**
22
     * @var Release
23
     */
24
    private $release;
25
    /**
26
     * @var string
27
     */
28
    private $disk;
29
30
    /**
31
     * Create a new job instance.
32
     *
33
     * @param Release $release
34
     * @param string  $disk
35
     */
36
    public function __construct(Release $release, $disk = GenerateRdf::REPO_ROOT)
37
    {
38
        $this->release = $release;
39
        $this->disk    = $disk;
40
    }
41
42
    /**
43
     * Execute the job.
44
     *
45
     * @return void
46
     * @throws \InvalidArgumentException
47
     * @throws \GitWrapper\GitException
48
     * @throws \Symfony\Component\Process\Exception\RuntimeException
49
     * @throws \Symfony\Component\Process\Exception\ProcessFailedException
50
     * @throws \Symfony\Component\Process\Exception\LogicException
51
     */
52
    public function handle()
53
    {
54
        //todo:lot's more try/catch here
55
        $project = $this->release->project;
56
        $repo    = $project->repo;
57
        $user    = $this->release->user;
58
59
        //todo: rdf generator shouldn't responsible for storage management
60
        Git::initDir($project, $this->disk,$user);
61
62
        //todo: this section should be in a transaction
63
        $this->release->published_at = Carbon::now();
64
        $this->release->save();
65
        //foreach selected vocabulary
66
        $vocabs = $this->release->vocabularies()->get();
67
        foreach ($vocabs as $vocab) {
68
            $job = new GenerateRdf($vocab, $this->release, $this->disk);
69
            $job->handle();
70
        }
71
        $vocabs = $this->release->elementsets()->get();
72
        foreach ($vocabs as $vocab) {
73
            $job = new GenerateRdf($vocab, $this->release, $this->disk);
74
            $job->handle();
75
        }
76
        //when the jobs are complete:
77
        //commit the generated rdf with the version as the commit message
78
        Git::commitDir($project, $this->release->name, $this->disk);
79
80
        if ($project->repo) {
81
            //push the repo to github
82
            Git::updateRemote($this->release, $this->disk,);
0 ignored issues
show
Bug introduced by
A parse error occurred: Syntax error, unexpected ')' on line 82 at column 58
Loading history...
83
            //push the release to GitHub
84
            $gitHub = new GitHubService($this->release);
85
            try {
86
                $gitHub->setRelease();
87
            }
88
            catch (GithubAuthenticationException $e) {
89
                Redirect::back()->withErrors(['You\'re trying to access GitHub, but you don\'t seem to have any current GitHub credentials.', 'You must logout of the OMR, and login to the OMR again using the \'Login with GitHub\' link.']);
90
            }
91
        } else {
92
            //tag the commit with the version
93
            Git::tagDir($project, $this->release->tag_name, $this->disk);
94
        }
95
        //todo: run the GenerateDocs job
96
        //notify the user that it's done
97
        $this->release->User->notify(new ReleaseWasPublished($this->release));
98
    }
99
}
100