Skip to content

Commit

Permalink
New PHAR build (#477)
Browse files Browse the repository at this point in the history
* Add PHAR build process & new `PipelineFactory`

* Add Google services cleanup tasks to composer

---------

Co-authored-by: Norbert Orzechowicz <[email protected]>
  • Loading branch information
stloyd and norberttech authored Oct 2, 2023
1 parent b32bb63 commit 98aecbc
Show file tree
Hide file tree
Showing 17 changed files with 4,082 additions and 364 deletions.
66 changes: 66 additions & 0 deletions .github/workflows/build-phar.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Build Flow-PHP PHAR

on:
push:
branches: [ 1.x ]

jobs:
build-phar:
name: "Build Flow-PHP PHAR"

runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
dependencies:
- "locked"
php-version:
- "8.1"

steps:
- name: "Checkout"
uses: "actions/checkout@v3"

- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
coverage: none
tools: composer:v2
php-version: "${{ matrix.php-version }}"
ini-values: memory_limit=-1

- name: "Get Composer Cache Directory"
id: composer-cache
run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- name: "Cache Composer dependencies"
uses: "actions/cache@v3"
with:
path: "${{ steps.composer-cache.outputs.dir }}"
key: "php-${{ matrix.php-version }}-locked-composer-${{ hashFiles('**/composer.lock') }}"
restore-keys: |
php-${{ matrix.php-version }}-locked-composer-
- name: "Install locked dependencies"
run: "composer install --no-interaction --no-progress"

- name: "Build PHAR file"
run: "composer build:phar"

- name: "Validate Flow PHAR"
run: |
./build/flow-php.phar --version
- name: "Prepare artifact name"
if: ${{ github.event_name == 'push' }}
shell: bash
run: |
BUILD_TAG=${GITHUB_SHA:0:7}
echo "BUILD_TAG=$BUILD_TAG" >> $GITHUB_ENV
- uses: actions/upload-artifact@v3
with:
name: flow-php-${{ env.BUILD_TAG }}.phar
path: build/flow-php.phar
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
vendor
var
docker-compose.yml
docker-compose.yml
build/flow-php.phar
17 changes: 12 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Please check below packages and select only those that you are going to use:

For example if you want to work with json/csv files here are dependencies you will need to install:

```
```shell
composer require flow-php/etl:^0.1 flow-php/etl-adapter-csv:^0.1 flow-php/etl-adapter-json:^0.1
```

Expand All @@ -53,21 +53,21 @@ For the code coverage, please install [pcov](https://pecl.php.net/package/pcov).

### Prepare Project:

```
```shell
cp docker-compose.yml.dist docker-compose.yml
composer install
docker compose up -d
```

### Run Test Suite

```
```shell
composer test
```

### Run Static Analyze

```
```shell
composer static:analyze
```

Expand All @@ -76,10 +76,17 @@ composer static:analyze
This command will execute exactly the same tests as we run at Github Actions before PR can get merged.
If it passes locally, you are good to open pull request.

```
```shell
composer build
```

## Building PHAR

```shell
composer build:phar
./flow-php.phar --version
```

## Usage

In order to understand how Flow works, please read [documentation](src/core/etl/README.md)
Expand Down
24 changes: 24 additions & 0 deletions box.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"alias": "flow-php.phar",
"banner": false,
"blacklist": [
".github",
"examples",
"docs",
"tests",
"tools",
"var",
"vendor/fig",
"vendor/php-http/mock-client"
],
"compression": "GZ",
"directories": [
"build",
"src",
"vendor"
],
"git-commit-short": "git_commit_short",
"main": "build/runtime.php",
"metadata": "FlowVersion::getVersion",
"output": "build/flow-php.phar"
}
33 changes: 33 additions & 0 deletions build/runtime.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

declare(strict_types=1);

require 'phar://flow-php.phar/vendor/autoload.php';

use Flow\ETL\PipelineFactory;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\SingleCommandApplication;
use Symfony\Component\Console\Style\SymfonyStyle;

(new SingleCommandApplication())
->setName('Flow-PHP - Extract Transform Load - Data processing framework')
->setVersion(FlowVersion::getVersion())
->addArgument('input-file', InputArgument::REQUIRED, '')
->setCode(function (InputInterface $input, OutputInterface $output): int {
try {
/** @phpstan-ignore-next-line */
$loader = new PipelineFactory((string) $input->getArgument('input-file'));
$loader->run();
} catch (\Exception $exception) {
$style = new SymfonyStyle($input, $output);
$style->error($exception->getMessage());

return Command::FAILURE;
}

return Command::SUCCESS;
})
->run();
11 changes: 11 additions & 0 deletions build/version.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

declare(strict_types=1);

final class FlowVersion
{
public static function getVersion(): string
{
return '1.0.x-@git_commit_short@';
}
}
8 changes: 7 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@
"psr/simple-cache": "^1.0 || ^2.0 || ^3.0",
"react/child-process": "^0.6.4",
"react/promise": "^2.9.0",
"react/socket": "^1.11"
"react/socket": "^1.11",
"symfony/console": "^6.3"
},
"require-dev": {
"aeon-php/calendar": "^1.0",
Expand All @@ -54,6 +55,7 @@
},
"autoload": {
"files": [
"build/version.php",
"src/core/etl/src/Flow/ETL/DSL/functions.php",
"src/lib/array-dot/src/Flow/ArrayDot/array_dot.php"
],
Expand Down Expand Up @@ -165,6 +167,9 @@
"cs:php:fix": [
"tools/cs-fixer/vendor/bin/php-cs-fixer fix"
],
"build:phar": [
"tools/box/vendor/bin/box compile"
],
"pre-autoload-dump": "Google\\Task\\Composer::cleanup",
"post-install-cmd": [
"@tools:install"
Expand All @@ -173,6 +178,7 @@
"@tools:install"
],
"tools:install": [
"composer install --working-dir=./tools/box",
"composer install --working-dir=./tools/cs-fixer",
"composer install --working-dir=./tools/infection",
"composer install --working-dir=./tools/monorepo",
Expand Down
Loading

0 comments on commit 98aecbc

Please sign in to comment.