Build modified streamline images

The official image from streamline does not currently work for the arm64
platform. As a temporary measure, the source code and docker build scripts
have been lifted from the official images and are used to build locally.

Some additional modifications are made to reduce overall image size, these
are documented in docker/README.md
This commit is contained in:
2024-03-10 16:17:50 -07:00
parent 2ffc3c408a
commit a424394109
13506 changed files with 1860172 additions and 6 deletions
@@ -0,0 +1,16 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class Application extends Type {
public function isApplication(): bool {
return true;
}
}
@@ -0,0 +1,37 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class ApplicationName {
/** @var string */
private $name;
public function __construct(string $name) {
$this->ensureValidFormat($name);
$this->name = $name;
}
public function asString(): string {
return $this->name;
}
public function isEqual(ApplicationName $name): bool {
return $this->name === $name->name;
}
private function ensureValidFormat(string $name): void {
if (!\preg_match('#\w/\w#', $name)) {
throw new InvalidApplicationNameException(
\sprintf('Format of name "%s" is not valid - expected: vendor/packagename', $name),
InvalidApplicationNameException::InvalidFormat
);
}
}
}
@@ -0,0 +1,39 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class Author {
/** @var string */
private $name;
/** @var Email */
private $email;
public function __construct(string $name, Email $email) {
$this->name = $name;
$this->email = $email;
}
public function asString(): string {
return \sprintf(
'%s <%s>',
$this->name,
$this->email->asString()
);
}
public function getName(): string {
return $this->name;
}
public function getEmail(): Email {
return $this->email;
}
}
@@ -0,0 +1,34 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class AuthorCollection implements \Countable, \IteratorAggregate {
/** @var Author[] */
private $authors = [];
public function add(Author $author): void {
$this->authors[] = $author;
}
/**
* @return Author[]
*/
public function getAuthors(): array {
return $this->authors;
}
public function count(): int {
return \count($this->authors);
}
public function getIterator(): AuthorCollectionIterator {
return new AuthorCollectionIterator($this);
}
}
@@ -0,0 +1,42 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class AuthorCollectionIterator implements \Iterator {
/** @var Author[] */
private $authors;
/** @var int */
private $position = 0;
public function __construct(AuthorCollection $authors) {
$this->authors = $authors->getAuthors();
}
public function rewind(): void {
$this->position = 0;
}
public function valid(): bool {
return $this->position < \count($this->authors);
}
public function key(): int {
return $this->position;
}
public function current(): Author {
return $this->authors[$this->position];
}
public function next(): void {
$this->position++;
}
}
@@ -0,0 +1,33 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
use PharIo\Version\Version;
class BundledComponent {
/** @var string */
private $name;
/** @var Version */
private $version;
public function __construct(string $name, Version $version) {
$this->name = $name;
$this->version = $version;
}
public function getName(): string {
return $this->name;
}
public function getVersion(): Version {
return $this->version;
}
}
@@ -0,0 +1,34 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class BundledComponentCollection implements \Countable, \IteratorAggregate {
/** @var BundledComponent[] */
private $bundledComponents = [];
public function add(BundledComponent $bundledComponent): void {
$this->bundledComponents[] = $bundledComponent;
}
/**
* @return BundledComponent[]
*/
public function getBundledComponents(): array {
return $this->bundledComponents;
}
public function count(): int {
return \count($this->bundledComponents);
}
public function getIterator(): BundledComponentCollectionIterator {
return new BundledComponentCollectionIterator($this);
}
}
@@ -0,0 +1,42 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class BundledComponentCollectionIterator implements \Iterator {
/** @var BundledComponent[] */
private $bundledComponents;
/** @var int */
private $position = 0;
public function __construct(BundledComponentCollection $bundledComponents) {
$this->bundledComponents = $bundledComponents->getBundledComponents();
}
public function rewind(): void {
$this->position = 0;
}
public function valid(): bool {
return $this->position < \count($this->bundledComponents);
}
public function key(): int {
return $this->position;
}
public function current(): BundledComponent {
return $this->bundledComponents[$this->position];
}
public function next(): void {
$this->position++;
}
}
@@ -0,0 +1,31 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class CopyrightInformation {
/** @var AuthorCollection */
private $authors;
/** @var License */
private $license;
public function __construct(AuthorCollection $authors, License $license) {
$this->authors = $authors;
$this->license = $license;
}
public function getAuthors(): AuthorCollection {
return $this->authors;
}
public function getLicense(): License {
return $this->license;
}
}
@@ -0,0 +1,31 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class Email {
/** @var string */
private $email;
public function __construct(string $email) {
$this->ensureEmailIsValid($email);
$this->email = $email;
}
public function asString(): string {
return $this->email;
}
private function ensureEmailIsValid(string $url): void {
if (\filter_var($url, \FILTER_VALIDATE_EMAIL) === false) {
throw new InvalidEmailException;
}
}
}
@@ -0,0 +1,46 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
use PharIo\Version\Version;
use PharIo\Version\VersionConstraint;
class Extension extends Type {
/** @var ApplicationName */
private $application;
/** @var VersionConstraint */
private $versionConstraint;
public function __construct(ApplicationName $application, VersionConstraint $versionConstraint) {
$this->application = $application;
$this->versionConstraint = $versionConstraint;
}
public function getApplicationName(): ApplicationName {
return $this->application;
}
public function getVersionConstraint(): VersionConstraint {
return $this->versionConstraint;
}
public function isExtension(): bool {
return true;
}
public function isExtensionFor(ApplicationName $name): bool {
return $this->application->isEqual($name);
}
public function isCompatibleWith(ApplicationName $name, Version $version): bool {
return $this->isExtensionFor($name) && $this->versionConstraint->complies($version);
}
}
@@ -0,0 +1,16 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class Library extends Type {
public function isLibrary(): bool {
return true;
}
}
@@ -0,0 +1,31 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class License {
/** @var string */
private $name;
/** @var Url */
private $url;
public function __construct(string $name, Url $url) {
$this->name = $name;
$this->url = $url;
}
public function getName(): string {
return $this->name;
}
public function getUrl(): Url {
return $this->url;
}
}
@@ -0,0 +1,92 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
use PharIo\Version\Version;
class Manifest {
/** @var ApplicationName */
private $name;
/** @var Version */
private $version;
/** @var Type */
private $type;
/** @var CopyrightInformation */
private $copyrightInformation;
/** @var RequirementCollection */
private $requirements;
/** @var BundledComponentCollection */
private $bundledComponents;
public function __construct(ApplicationName $name, Version $version, Type $type, CopyrightInformation $copyrightInformation, RequirementCollection $requirements, BundledComponentCollection $bundledComponents) {
$this->name = $name;
$this->version = $version;
$this->type = $type;
$this->copyrightInformation = $copyrightInformation;
$this->requirements = $requirements;
$this->bundledComponents = $bundledComponents;
}
public function getName(): ApplicationName {
return $this->name;
}
public function getVersion(): Version {
return $this->version;
}
public function getType(): Type {
return $this->type;
}
public function getCopyrightInformation(): CopyrightInformation {
return $this->copyrightInformation;
}
public function getRequirements(): RequirementCollection {
return $this->requirements;
}
public function getBundledComponents(): BundledComponentCollection {
return $this->bundledComponents;
}
public function isApplication(): bool {
return $this->type->isApplication();
}
public function isLibrary(): bool {
return $this->type->isLibrary();
}
public function isExtension(): bool {
return $this->type->isExtension();
}
public function isExtensionFor(ApplicationName $application, Version $version = null): bool {
if (!$this->isExtension()) {
return false;
}
/** @var Extension $type */
$type = $this->type;
if ($version !== null) {
return $type->isCompatibleWith($application, $version);
}
return $type->isExtensionFor($application);
}
}
@@ -0,0 +1,23 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class PhpExtensionRequirement implements Requirement {
/** @var string */
private $extension;
public function __construct(string $extension) {
$this->extension = $extension;
}
public function asString(): string {
return $this->extension;
}
}
@@ -0,0 +1,25 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
use PharIo\Version\VersionConstraint;
class PhpVersionRequirement implements Requirement {
/** @var VersionConstraint */
private $versionConstraint;
public function __construct(VersionConstraint $versionConstraint) {
$this->versionConstraint = $versionConstraint;
}
public function getVersionConstraint(): VersionConstraint {
return $this->versionConstraint;
}
}
@@ -0,0 +1,13 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
interface Requirement {
}
@@ -0,0 +1,34 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class RequirementCollection implements \Countable, \IteratorAggregate {
/** @var Requirement[] */
private $requirements = [];
public function add(Requirement $requirement): void {
$this->requirements[] = $requirement;
}
/**
* @return Requirement[]
*/
public function getRequirements(): array {
return $this->requirements;
}
public function count(): int {
return \count($this->requirements);
}
public function getIterator(): RequirementCollectionIterator {
return new RequirementCollectionIterator($this);
}
}
@@ -0,0 +1,42 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class RequirementCollectionIterator implements \Iterator {
/** @var Requirement[] */
private $requirements;
/** @var int */
private $position = 0;
public function __construct(RequirementCollection $requirements) {
$this->requirements = $requirements->getRequirements();
}
public function rewind(): void {
$this->position = 0;
}
public function valid(): bool {
return $this->position < \count($this->requirements);
}
public function key(): int {
return $this->position;
}
public function current(): Requirement {
return $this->requirements[$this->position];
}
public function next(): void {
$this->position++;
}
}
@@ -0,0 +1,41 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
use PharIo\Version\VersionConstraint;
abstract class Type {
public static function application(): Application {
return new Application;
}
public static function library(): Library {
return new Library;
}
public static function extension(ApplicationName $application, VersionConstraint $versionConstraint): Extension {
return new Extension($application, $versionConstraint);
}
/** @psalm-assert-if-true Application $this */
public function isApplication(): bool {
return false;
}
/** @psalm-assert-if-true Library $this */
public function isLibrary(): bool {
return false;
}
/** @psalm-assert-if-true Extension $this */
public function isExtension(): bool {
return false;
}
}
@@ -0,0 +1,36 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Manifest.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Manifest;
class Url {
/** @var string */
private $url;
public function __construct(string $url) {
$this->ensureUrlIsValid($url);
$this->url = $url;
}
public function asString(): string {
return $this->url;
}
/**
* @param string $url
*
* @throws InvalidUrlException
*/
private function ensureUrlIsValid($url): void {
if (\filter_var($url, \FILTER_VALIDATE_URL) === false) {
throw new InvalidUrlException;
}
}
}