setName('package:build') ->setAliases([ "package" ]) ->setDescription("Package the library into a zipball, or publish directly") ->addOption("publish", null, InputOption::VALUE_REQUIRED, "Publish to registry immediately after building") ->addOption("rm", null, InputOption::VALUE_NONE, "With --publish: remove the .zip after publishing") ->addOption("dirty", null, InputOption::VALUE_NONE, "Build directly from source without cloning") ->addOption("force", null, InputOption::VALUE_NONE, "Build even if the output file already exists") ->addArgument("version", InputArgument::OPTIONAL, "The tag to build (default is latest tag)") ; } protected function execute(InputInterface $input, OutputInterface $output): int { $registry = $input->getOption("publish"); $version = $input->getArgument("version"); $force = $input->getOption("force"); $builder = new PackageBuilder($output); $project = ProjectInfo::read(version:$version); if (file_exists($project->filename) && !$force) { $output->writeln("Package file already exists. Pass --force to rebuild it."); } else { $builder->build($project, $input->getOption("dirty"), $force); } if ($registry) { $credentials = $this->getCredentialsStore(); $providers = [ 'gitea' => new GiteaProvider($credentials) ]; $factory = new RegistryFactory($providers); $publisher = new PackagePublisher($factory, $output); if (!$registry) { $output->writeln([ "Missing registry to publish to. Please specify the registry like this:", "", " gitea:{server} - to publish to server as the default user", " gitea:{server}:{owner} - to publish to server as owner", "" ]); return self::INVALID; } $publisher->publish($project, $registry); if ($input->getOption("rm")) { $output->writeln("Unlinking ".$project->filename.""); unlink($project->filename); } } return 0; } }