public function run()
	{
		$version    = $this->getJConfig()->version;
		$remote     = $this->getJConfig()->github->remote;
		$branch     = $this->getJConfig()->github->branch;
		$owner      = $this->getJConfig()->github->owner;
		$repository = $this->getJConfig()->github->repository;

		$this->say('Creating package ' . $this->getJConfig()->extension . " " . $this->getJConfig()->version);

		$latest_release = $this->getLatestReleases();
		$pulls          = $this->getAllRepoPulls();

		$changes = $this->getChanges($latest_release, $pulls);

		$this->changelogUpdate($changes);

		$this->taskGitStack()
			->add('CHANGELOG.md')
			->commit("Prepare for release version " . $version)
			->push($remote, $branch)
			->run();

		$this->say("Creating github tag: $version");

		$this->taskGitStack()
			->stopOnFail()
			->tag($version)
			->push($remote, $version)
			->run();

		$this->say("Tag created: $version and published at $owner/$repository");

		$this->say("Creating the release at: https://github.com/$owner/$repository/releases/tag/$version");

		$github           = $this->getGithub();
		$changesInRelease = "# Changelog: \n\n" . implode("\n* ", $changes);

		$response = $github->repositories->releases->create(
			$owner,
			$repository,
			(string) $version,
			'',
			$this->getJConfig()->extension . " " . $version,
			$changesInRelease,
			false,
			true
		);

		$this->say(print_r($repository, true));

		$this->uploadToGithub($version, $this->getJConfig()->github->token, $response->upload_url);
	}