Skip to content

self-update before PHAR is available yet #359

@asgrim

Description

@asgrim

When you try to pie self-update when the new release is made, but the PHAR job has not built and attached the PHAR yet, you get an error.

It's only a short time, but as users increase, someone will encounter this.

Details

$ pie self-update
🥧 PHP Installer for Extensions (PIE) 1.2.0, from The PHP Foundation
You are running PHP 8.4.12
Target PHP installation: 8.4.12 nts, on Linux/OSX/etc x86_64 (from /usr/bin/php8.4)
PHP Warning:  Trying to access array offset on false in phar:///usr/local/bin/pie/src/SelfManage/Update/FetchPieReleaseFromGitHub.php on line 75
PHP Stack trace:
PHP   1. {main}() /usr/local/bin/pie:0
PHP   2. require() /usr/local/bin/pie:15
PHP   3. Symfony\Component\Console\Application->run($input = class Symfony\Component\Console\Input\ArgvInput { protected $definition = class Symfony\Component\Console\Input\InputDefinition { private array $arguments = [...]; private int $requiredCount = 1; private ?Symfony\Component\Console\Input\InputArgument $lastArrayArgument = NULL; private ?Symfony\Component\Console\Input\InputArgument $lastOptionalArgument = NULL; private array $options = [...]; private array $negations = [...]; private array $shortcuts = [...] }; protected $stream = NULL; protected $options = []; protected $arguments = ['command' => 'self-update']; protected $interactive = FALSE; private array $tokens = [0 => 'self-update']; private array $parsed = [] }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private bool $decorated = TRUE; private array $styles = [...]; private Symfony\Component\Console\Formatter\OutputFormatterStyleStack $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private $stream = resource(3) of type (stream) }; private array $consoleSectionOutputs = [] }) phar:///usr/local/bin/pie/bin/pie:55
PHP   4. Symfony\Component\Console\Application->doRun($input = class Symfony\Component\Console\Input\ArgvInput { protected $definition = class Symfony\Component\Console\Input\InputDefinition { private array $arguments = [...]; private int $requiredCount = 1; private ?Symfony\Component\Console\Input\InputArgument $lastArrayArgument = NULL; private ?Symfony\Component\Console\Input\InputArgument $lastOptionalArgument = NULL; private array $options = [...]; private array $negations = [...]; private array $shortcuts = [...] }; protected $stream = NULL; protected $options = []; protected $arguments = ['command' => 'self-update']; protected $interactive = FALSE; private array $tokens = [0 => 'self-update']; private array $parsed = [] }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private bool $decorated = TRUE; private array $styles = [...]; private Symfony\Component\Console\Formatter\OutputFormatterStyleStack $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private $stream = resource(3) of type (stream) }; private array $consoleSectionOutputs = [] }) phar:///usr/local/bin/pie/vendor/symfony/console/Application.php:175
PHP   5. Symfony\Component\Console\Application->doRunCommand($command = class Php\Pie\Command\SelfUpdateCommand { private ?Symfony\Component\Console\Application ${Symfony\Component\Console\Command\Command}application = class Symfony\Component\Console\Application { private array $commands = [...]; private bool $wantHelps = FALSE; private ?Symfony\Component\Console\Command\Command $runningCommand = ...; private string $name = '🥧 PHP Installer for Extensions (PIE)'; private string $version = '1.2.0'; private ?Symfony\Component\Console\CommandLoader\CommandLoaderInterface $commandLoader = class Symfony\Component\Console\CommandLoader\ContainerCommandLoader { ... }; private bool $catchExceptions = TRUE; private bool $catchErrors = FALSE; private bool $autoExit = TRUE; private Symfony\Component\Console\Input\InputDefinition $definition = class Symfony\Component\Console\Input\InputDefinition { ... }; private Symfony\Component\Console\Helper\HelperSet $helperSet = class Symfony\Component\Console\Helper\HelperSet { ... }; private ?Symfony\Contracts\EventDispatcher\EventDispatcherInterface $dispatcher = class Symfony\Component\EventDispatcher\EventDispatcher { ... }; private Symfony\Component\Console\Terminal $terminal = class Symfony\Component\Console\Terminal { ... }; private string $defaultCommand = 'list'; private bool $singleCommand = FALSE; private bool $initialized = TRUE; private ?Symfony\Component\Console\SignalRegistry\SignalRegistry $signalRegistry = class Symfony\Component\Console\SignalRegistry\SignalRegistry { ... }; private array $signalsToDispatchEvent = [...] }; private ?string ${Symfony\Component\Console\Command\Command}name = 'self-update'; private ?string ${Symfony\Component\Console\Command\Command}processTitle = NULL; private array ${Symfony\Component\Console\Command\Command}aliases = []; private Symfony\Component\Console\Input\InputDefinition ${Symfony\Component\Console\Command\Command}definition = class Symfony\Component\Console\Input\InputDefinition { private array $arguments = [...]; private int $requiredCount = 0; private ?Symfony\Component\Console\Input\InputArgument $lastArrayArgument = NULL; private ?Symfony\Component\Console\Input\InputArgument $lastOptionalArgument = NULL; private array $options = [...]; private array $negations = [...]; private array $shortcuts = [...] }; private bool ${Symfony\Component\Console\Command\Command}hidden = FALSE; private string ${Symfony\Component\Console\Command\Command}help = ''; private string ${Symfony\Component\Console\Command\Command}description = 'Self update PIE'; private ?Symfony\Component\Console\Input\InputDefinition ${Symfony\Component\Console\Command\Command}fullDefinition = class Symfony\Component\Console\Input\InputDefinition { private array $arguments = [...]; private int $requiredCount = 1; private ?Symfony\Component\Console\Input\InputArgument $lastArrayArgument = NULL; private ?Symfony\Component\Console\Input\InputArgument $lastOptionalArgument = NULL; private array $options = [...]; private array $negations = [...]; private array $shortcuts = [...] }; private bool ${Symfony\Component\Console\Command\Command}ignoreValidationErrors = FALSE; private ?Closure ${Symfony\Component\Console\Command\Command}code = NULL; private array ${Symfony\Component\Console\Command\Command}synopsis = []; private array ${Symfony\Component\Console\Command\Command}usages = []; private ?Symfony\Component\Console\Helper\HelperSet ${Symfony\Component\Console\Command\Command}helperSet = class Symfony\Component\Console\Helper\HelperSet { private array $helpers = [...] }; private readonly string $githubApiBaseUrl = 'https://api.github.com'; private readonly Php\Pie\ComposerIntegration\QuieterConsoleIO $io = class Php\Pie\ComposerIntegration\QuieterConsoleIO { protected $authentications = [...]; protected $input = class Symfony\Component\Console\Input\ArgvInput { ... }; protected $output = class Symfony\Component\Console\Output\ConsoleOutput { ... }; protected $helperSet = class Php\Pie\ComposerIntegration\MinimalHelperSet { ... }; protected $lastMessage = ''; protected $lastMessageErr = ''; private ${Composer\IO\ConsoleIO}startTime = NULL; private ${Composer\IO\ConsoleIO}verbosityMap = [...]; public array $errors = [...] }; private readonly Psr\Container\ContainerInterface $container = class Illuminate\Container\Container { protected $resolved = [...]; protected $bindings = [...]; protected $methodBindings = [...]; protected $instances = [...]; protected $scopedInstances = [...]; protected $aliases = [...]; protected $abstractAliases = [...]; protected $extenders = [...]; protected $tags = [...]; protected $buildStack = [...]; protected $with = [...]; public $contextual = [...]; protected $reboundCallbacks = [...]; protected $globalBeforeResolvingCallbacks = [...]; protected $globalResolvingCallbacks = [...]; protected $globalAfterResolvingCallbacks = [...]; protected $beforeResolvingCallbacks = [...]; protected $resolvingCallbacks = [...]; protected $afterResolvingCallbacks = [...] }; private readonly Php\Pie\File\FullPathToSelf $fullPathToSelf = class Php\Pie\File\FullPathToSelf { private readonly string $originalCwd = '/home/james/workspace/phpf/pie' } }, $input = class Symfony\Component\Console\Input\ArgvInput { protected $definition = class Symfony\Component\Console\Input\InputDefinition { private array $arguments = [...]; private int $requiredCount = 1; private ?Symfony\Component\Console\Input\InputArgument $lastArrayArgument = NULL; private ?Symfony\Component\Console\Input\InputArgument $lastOptionalArgument = NULL; private array $options = [...]; private array $negations = [...]; private array $shortcuts = [...] }; protected $stream = NULL; protected $options = []; protected $arguments = ['command' => 'self-update']; protected $interactive = FALSE; private array $tokens = [0 => 'self-update']; private array $parsed = [] }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private bool $decorated = TRUE; private array $styles = [...]; private Symfony\Component\Console\Formatter\OutputFormatterStyleStack $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private $stream = resource(3) of type (stream) }; private array $consoleSectionOutputs = [] }) phar:///usr/local/bin/pie/vendor/symfony/console/Application.php:324
PHP   6. Symfony\Component\Console\Command\Command->run($input = class Symfony\Component\Console\Input\ArgvInput { protected $definition = class Symfony\Component\Console\Input\InputDefinition { private array $arguments = [...]; private int $requiredCount = 1; private ?Symfony\Component\Console\Input\InputArgument $lastArrayArgument = NULL; private ?Symfony\Component\Console\Input\InputArgument $lastOptionalArgument = NULL; private array $options = [...]; private array $negations = [...]; private array $shortcuts = [...] }; protected $stream = NULL; protected $options = []; protected $arguments = ['command' => 'self-update']; protected $interactive = FALSE; private array $tokens = [0 => 'self-update']; private array $parsed = [] }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private bool $decorated = TRUE; private array $styles = [...]; private Symfony\Component\Console\Formatter\OutputFormatterStyleStack $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private $stream = resource(3) of type (stream) }; private array $consoleSectionOutputs = [] }) phar:///usr/local/bin/pie/vendor/symfony/console/Application.php:1096
PHP   7. Php\Pie\Command\SelfUpdateCommand->execute($input = class Symfony\Component\Console\Input\ArgvInput { protected $definition = class Symfony\Component\Console\Input\InputDefinition { private array $arguments = [...]; private int $requiredCount = 1; private ?Symfony\Component\Console\Input\InputArgument $lastArrayArgument = NULL; private ?Symfony\Component\Console\Input\InputArgument $lastOptionalArgument = NULL; private array $options = [...]; private array $negations = [...]; private array $shortcuts = [...] }; protected $stream = NULL; protected $options = []; protected $arguments = ['command' => 'self-update']; protected $interactive = FALSE; private array $tokens = [0 => 'self-update']; private array $parsed = [] }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private bool $decorated = TRUE; private array $styles = [...]; private Symfony\Component\Console\Formatter\OutputFormatterStyleStack $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... } }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private $stream = resource(3) of type (stream) }; private array $consoleSectionOutputs = [] }) phar:///usr/local/bin/pie/vendor/symfony/console/Command/Command.php:326
PHP   8. Php\Pie\SelfManage\Update\FetchPieReleaseFromGitHub->latestReleaseMetadata() phar:///usr/local/bin/pie/src/Command/SelfUpdateCommand.php:95
PHP Fatal error:  Uncaught TypeError: Php\Pie\SelfManage\Update\ReleaseMetadata::__construct(): Argument #2 ($downloadUrl) must be of type string, null given, called in phar:///usr/local/bin/pie/src/SelfManage/Update/FetchPieReleaseFromGitHub.php on line 73 and defined in phar:///usr/local/bin/pie/src/SelfManage/Update/ReleaseMetadata.php:14
Stack trace:
#0 phar:///usr/local/bin/pie/src/SelfManage/Update/FetchPieReleaseFromGitHub.php(73): Php\Pie\SelfManage\Update\ReleaseMetadata->__construct()
#1 phar:///usr/local/bin/pie/src/Command/SelfUpdateCommand.php(95): Php\Pie\SelfManage\Update\FetchPieReleaseFromGitHub->latestReleaseMetadata()
#2 phar:///usr/local/bin/pie/vendor/symfony/console/Command/Command.php(326): Php\Pie\Command\SelfUpdateCommand->execute()
#3 phar:///usr/local/bin/pie/vendor/symfony/console/Application.php(1096): Symfony\Component\Console\Command\Command->run()
#4 phar:///usr/local/bin/pie/vendor/symfony/console/Application.php(324): Symfony\Component\Console\Application->doRunCommand()
#5 phar:///usr/local/bin/pie/vendor/symfony/console/Application.php(175): Symfony\Component\Console\Application->doRun()
#6 phar:///usr/local/bin/pie/bin/pie(55): Symfony\Component\Console\Application->run()
#7 /usr/local/bin/pie(15): require('...')
#8 {main}
  thrown in phar:///usr/local/bin/pie/src/SelfManage/Update/ReleaseMetadata.php on line 14

Metadata

Metadata

Assignees

Labels

maintainer investigatingThis ticket is being investigated by maintainers. Please check with us before contributing PRs etc!

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions