Skip to content

Commit 763b56f

Browse files
committed
Initial commit
0 parents  commit 763b56f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+6211
-0
lines changed

.env.dist

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SPRYKER_TOOLKIT_CHATGPT_API_AUTH_KEY=""
2+
SPRYKER_TOOLKIT_DEEPL_API_AUTH_KEY=""

.github/workflows/ci.yml

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
name: CI
2+
3+
on:
4+
pull_request:
5+
6+
push:
7+
branches:
8+
- main
9+
10+
# Allows you to run this workflow manually from the Actions tab
11+
workflow_dispatch:
12+
13+
concurrency:
14+
group: ${{ github.repository }}-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
15+
cancel-in-progress: true
16+
17+
jobs:
18+
validation:
19+
runs-on: ubuntu-latest
20+
strategy:
21+
fail-fast: false
22+
matrix:
23+
php-version: [
24+
'8.1',
25+
'8.2',
26+
'8.3'
27+
]
28+
29+
steps:
30+
- name: Setup PHP
31+
uses: shivammathur/setup-php@v2
32+
with:
33+
php-version: ${{ matrix.php-version }}
34+
extensions: mbstring, intl
35+
36+
- name: Checkout
37+
uses: actions/checkout@v3
38+
39+
- name: Composer validate
40+
run: composer validate
41+
42+
- name: Composer get cache directory
43+
id: composer-cache
44+
run: |
45+
echo "::set-output name=dir::$(composer config cache-files-dir)"
46+
47+
- name: Composer cache
48+
uses: actions/cache@v2
49+
with:
50+
path: ${{ steps.composer-cache.outputs.dir }}
51+
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
52+
restore-keys: |
53+
${{ runner.os }}-composer-
54+
55+
- name: Composer install
56+
run: |
57+
composer --version
58+
if [[ ${{ matrix.php-version }} == '8.2' ]]; then
59+
composer update --prefer-stable --optimize-autoloader
60+
else
61+
composer install --optimize-autoloader
62+
fi
63+
64+
- name: Warmup
65+
run: ./bin/spryker-toolkit container:dump
66+
67+
- name: PHPStan checks
68+
run: composer stan
69+
70+
- name: CodeStyle checks
71+
run: composer cs-check

.gitignore

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# IDE
2+
.idea/
3+
.project/
4+
nbproject/
5+
.buildpath/
6+
.settings/
7+
*.sublime-*
8+
9+
# app
10+
/.env
11+
/var/*
12+
!/var/cache
13+
/var/cache/*
14+
!/var/cache/.gitkeep
15+
!/var/log
16+
/var/log/*
17+
!/var/log/.gitkeep
18+
19+
# tooling
20+
vendor/

CONTRIBUTING.md

Whitespace-only changes.

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2023 Spryker Community
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
<h1 align="center">
2+
Spryker CLI Toolkit
3+
<br>
4+
</h1>
5+
6+
<h4 align="center">A suite of utilities designed to enhance performance in your day-to-day operations with Spryker Commerce OS.</h4>
7+
8+
<p align="center">
9+
<a href="#installation">Installation</a> •
10+
<a href="#usage">Usage</a> •
11+
<a href="#contributing">Contributing</a>
12+
</p>
13+
14+
<p align="center">
15+
<a href="https://github.com/spryker-community/spryker-toolkit/actions?query=workflow%3ACI+branch%3Amain">
16+
<img src="https://github.com/spryker-community/spryker-toolkit/workflows/CI/badge.svg?branch=main"/>
17+
</a>
18+
<a href="https://packagist.org/packages/spryker-community/sprkyer-translations">
19+
<img src="https://img.shields.io/packagist/v/spryker-community/sprkyer-translations.svg?style=flat-square">
20+
</a>
21+
<a href="LICENSE">
22+
<img src="https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square">
23+
</a>
24+
<a href="https://commercequest.space/">
25+
<img src="https://img.shields.io/badge/join-commercequest-blue.svg?logo=data:image/svg%2bxml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIxNnB4IiBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTYgMTYiIHhtbDpzcGFjZT0icHJlc2VydmUiPiAgPGltYWdlIGlkPSJpbWFnZTAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgeD0iMCIgeT0iMCIKICAgIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBTUFBQUFvTFE5VEFBQUFCR2RCVFVFQUFMR1BDL3hoQlFBQUFDQmpTRkpOCkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUNXRkJNVkVVQUFBQUFydThBcmU0QXNQSGQKQ3BIckFJdnNBSXpxQUl2WkFJRUFpcjBBc1BEWURaTGVBb2NBcWVnQXJlMEFwdU1BU0dRQWw5Q0xmdjhBREE4QW9OeW5BRnNBWG9IRApCbndBLy84QWxNdUJRYWJvQUlyVkFINEFIeW9BZmF3QWxjMEJDUTBmQUJKQUFDWWpBQlgvQVAvL0FLY0FydThBcnUvc0FJenBBSXJoCkFJWHJBSXZzQUl3QXJlNEFydThBcnU4QXJ1OEFydThBc1BIL0FIVHNBSXpzQUl6cUFJdm9BSXJyQUl6ckFJc0FyT3dBcnU4QXJ1OEEKcCtQTkQ0L3RBSXpsQUlqc0FJd0FyZTRBck8wQW5OWUFvdDhBbHMwOVNJZm9BSXJWQUg2SEFGRFlBSURyQUlzQXJPd0FydThBbGN3QQpOa3NBVm5jQVZXL3BBSVhtQUltbEFHSUFBQURrQUlmbEFJZ0FvTndBcmUwQXBlTUFabzNyQUh6ckFJdlhBSDhTQUF2bUFJanJBSXZiCkFJSUFxZWdBcnU0QWxNc0FBQURtQUlucEFJcStBSEhhQUlIb0FJcnFBSXZJQUhjQXF1b0FxZWdBZktzQUFBRG9BSW5pQUlhcEFHVG4KQUluckFJempBSWVnQUY4QXErc0FwT0VBVW5IS0FIanBBSXJjQUlQWkFJSHJBSXZOQUhvQUFBQUFyZTBBcGVQUkFIdnBBSXJnQUlYUgpBSHppQUlhWEFGa0FydThBck8wQXJPd0FyZTRBc08zQUJIam9BSXJzQUl6b0FJcm5BSW5VQUg0QXErd0FydThBcU9aRlJJYmVBSVBtCkFJam9BSXJxQUl2WUFJQUFsTXNBcXVvQW5OY0FjNThBRmdHWEFGbkRBSFRRQUh2RkFIV1VBRmpDQUhQZ0FJVzlBSENQQUZVQU8xRUEKYkpVQWU2a0FjWnNBUkYwQUFBQUFBUUFRQUFrMUFCOFVBQXdBQUFCdUFFR0JBRXhXQURNQUFBQUFyL0FBcmU3c0FJenFBSXNBcnUvdApBSXdBcnZBQXJ1N3RBSTBBcSt2Ly8vOG0yNkNrQUFBQXZYUlNUbE1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCkFBQUFBQUFBQUFBQUFBb1lLaHdqWnlBSlliM2F0ejBDYk9TN3EvNitEcGI3czE3eSsveDkvdDdydzJmUjBXdk0rem5wdEROS05IdjAKVmdXMDV3ZWs0amdhMWJrTEplSzhQdXVPQTFyOFp4dDMvWHFPN0RzQm05azR0dXJpTTgzQ0R3N0hzbm4ybWdmeHBSL2ZzNkxtT2Y3TwpUSUJFSnVUMTZlRW85ZmpDS01mNis0OERyZnpjYUFkVnd0bkRkcWJ6bGhFamNaUjhOUVFER0NjWkFpWlhIZ1p5N2s2b0FBQUFBV0pMClIwVEhqUVZLV3dBQUFBZDBTVTFGQitjTURnb1VOM2srN0NRQUFBRWJTVVJCVkJqVEFSQUI3LzRBQUFBQUFRSUJBUUVEQkFVR0J3Z0gKQmdBQUNRRUNBU1luSmdvTERDZ3BLaXNzQUFBQkFpMHVMekF4TWpNME5UWTNPRGtBRFE0Nk96eTl2YjQ5UGorL1FNQy9RUUFQRUVMQgpRMFJGUmtkSXdrbEtTOEpNQUFGTlRzRlBVRkZTVTc5VVZWWlh2MWdBV1ZyRFcxd1JFbDFld2w5Z1lXSy9Zd0JrWmNSbVp4TUdhRUZwCmFtdHN2MjF1QUcvQmNIRVVGWEp6d25SMWRuZkNlSGtBZXNON2ZCWVhmWDdDZjRDQnY3K0Nnd0NFd1lVWUdScUdoNytJaWIvQ2lvc2IKQUl6QmpZNlBrSkdTdjVPVXY3K1ZsaHdBbDhHTW1MMlptcHZGeGNXY25jS2Vud0Nnb2NUR29xT2twYWFucUttcXE2eXRBSzZ2c0xHeQpzeDIwdGJhM3VMbTZ1d0FBSG5LOHVCOEFJQUFoSWlNQUpDUWxBR2pDWmVjTTg2dHVBQUFBSlhSRldIUmtZWFJsT21OeVpXRjBaUUF5Ck1ESXpMVEV5TFRFMFZERXdPakl3T2pVMEt6QXdPakF3RG13REFRQUFBQ1YwUlZoMFpHRjBaVHB0YjJScFpua0FNakF5TXkweE1pMHgKTkZReE1Eb3lNRG8xTkNzd01Eb3dNSDh4dTcwQUFBQW9kRVZZZEdSaGRHVTZkR2x0WlhOMFlXMXdBREl3TWpNdE1USXRNVFJVTVRBNgpNakE2TlRVck1EQTZNRENPVTVIV0FBQUFBRWxGVGtTdVFtQ0MiIC8+Cjwvc3ZnPgo=&style=flat-square"/>
26+
</a>
27+
</p>
28+
29+
## Installation
30+
31+
### Git clone
32+
33+
```bash
34+
git clone https://github.com/spyker-community/spryker-toolkit && cd spryker-toolkit
35+
bin/spryker-toolkit
36+
```
37+
38+
### Composer
39+
40+
```bash
41+
composer require --dev spryker-community/spryker-toolkit
42+
vendor/bin/spryker-toolkit
43+
```
44+
45+
## Usage
46+
47+
You can see all the available commands by executing:
48+
49+
```bash
50+
bin/spryker-toolkit --help
51+
```
52+
53+
### Prerequisites
54+
55+
Some of the commands use external services like OpenAI or DeepL that requires API credentials. In those cases you will require to add the credential to your `.env` file.
56+
57+
1. Copy the template for the environment variables:
58+
59+
```bash
60+
cp .env.dist .env
61+
```
62+
63+
2. Add your own auth credentials for the service you are using:
64+
```
65+
SPRYKER_TOOLKIT_DEEPL_API_AUTH_KEY="your_deepl_api_token"
66+
SPRYKER_TOOLKIT_CHATGPT_API_AUTH_KEY="your_chatgpt_api_token"
67+
```
68+
69+
### Generate translations for the Spryker Yves storefront
70+
71+
```bash
72+
bin/spryker-toolkit translation:yves:generate
73+
```
74+
75+
#### Arguments
76+
77+
* `locales`: List of locales to which we want the Spryker glossary translated.
78+
79+
#### Options
80+
81+
* `--working-dir`: If specified, use the given directory as Spryker project working directory.
82+
* `--translation-engine`: The translation engine to be used for translation generation. Allowed values are deepl or chatgpt [default: "chatgpt"]
83+
84+
#### Examples
85+
86+
1. Generate missing translations Yves glossary to Spanish from Spain (es_ES) by ChatGPT.
87+
88+
```bash
89+
bin/spryker-toolkit translation:yves:generate es_ES --working-dir=../b2b-demo-marketplace- --translation-engine=chatgpt
90+
```
91+
92+
2. Generate missing translations Yves glossary to Spanish from Spain (es_ES) and French from France by DeepL.
93+
94+
```bash
95+
bin/spryker-toolkit translation:yves:generate es_ES fr_FR --working-dir=../b2b-demo-marketplace --translation-engine=deepl
96+
```
97+
98+
### Generate translations for the Spryker Zed backoffice
99+
100+
```bash
101+
bin/spryker-toolkit translation:yves:generate
102+
```
103+
104+
#### Arguments
105+
106+
* `locales`: List of locales to which we want the Spryker glossary translated.
107+
108+
#### Options
109+
110+
* `--working-dir`: If specified, use the given directory as Spryker project working directory.
111+
* `--translation-engine`: The translation engine to be used for translation generation. Allowed values are `deepl` or `chatgpt` [default: `chatgpt`]
112+
113+
#### Examples
114+
115+
1. Generate missing translations Zed glossary to Spanish from Spain (es_ES) by ChatGPT.
116+
117+
```bash
118+
bin/spryker-toolkit translation:zed:generate es_ES --working-dir=../b2b-demo-marketplace --translation-engine=chatgpt
119+
```
120+
121+
2. Generate missing translations Zed glossary to Spanish from Spain (es_ES) and French from France by DeepL.
122+
123+
```bash
124+
bin/spryker-toolkit translation:zed:generate es_ES fr_FR --working-dir=../b2b-demo-marketplace --translation-engine=deepl
125+
```
126+
127+
## Contributing
128+
129+
We love contributions, big or small. Please don't forget to read the [contribution guidelines](CONTRIBUTING.md).
130+
131+
## License
132+
133+
This package is released under the [MIT license](LICENSE)
134+
135+
#
136+
137+
<p align="center">
138+
Supported with :heart: by the Spryker Community
139+
</p>

bin/spryker-toolkit

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/usr/bin/env php
2+
<?php
3+
require_once __DIR__ . '/../vendor/autoload.php';
4+
5+
use SprykerCommunity\Toolkit\Release\Commands\PackagesReleaseCommand;
6+
use SprykerCommunity\Toolkit\Release\Commands\PrepareDemoCommand;
7+
use SprykerCommunity\Toolkit\Shared\Commands\ContainerDumpCommand;
8+
use SprykerCommunity\Toolkit\Translator\Commands\YvesTranslationCommand;
9+
use SprykerCommunity\Toolkit\Translator\Commands\ZedTranslationCommand;
10+
use Symfony\Component\Console\Application;
11+
use Symfony\Component\Dotenv\Dotenv;
12+
13+
(new Dotenv())->bootEnv(dirname(__DIR__, 1) . '/.env');
14+
15+
$container = include __DIR__ . '/../src/container.php';
16+
$container->compile(true);
17+
18+
$commands = array(
19+
new YvesTranslationCommand(),
20+
new ZedTranslationCommand(),
21+
new ContainerDumpCommand(),
22+
);
23+
24+
$app = new Application('Spryker Toolkit');
25+
foreach ($commands as $command) {
26+
if (method_exists($command, 'setContainer')) {
27+
$command->setContainer($container);
28+
}
29+
$app->add($command);
30+
}
31+
32+
$app->run();

composer.json

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
{
2+
"name": "spryker-community/spryker-toolkit",
3+
"description": "The Spryker Toolkit",
4+
"type": "library",
5+
"license": "MIT",
6+
"prefer-stable": true,
7+
"autoload": {
8+
"psr-4": {
9+
"SprykerCommunity\\Toolkit\\": "src"
10+
},
11+
"classmap": ["src"]
12+
},
13+
"require": {
14+
"php": ">=8.1",
15+
"ext-curl": "*",
16+
"ext-intl": "*",
17+
"ext-json": "*",
18+
"czproject/git-php": "^4.2",
19+
"deeplcom/deepl-php": "^1.5",
20+
"guzzlehttp/psr7": "^2.6",
21+
"knplabs/github-api": "^3.0",
22+
"league/csv": "^9.8",
23+
"monolog/monolog": "^3.5",
24+
"openai-php/client": "^0.7.7",
25+
"php-http/guzzle7-adapter": "^1.0",
26+
"symfony/config": "^6.4",
27+
"symfony/console": "^6.3",
28+
"symfony/dependency-injection": "^6.4",
29+
"symfony/dotenv": "^6.3",
30+
"symfony/intl": "^6.3",
31+
"symfony/yaml": "^6.4"
32+
},
33+
"require-dev": {
34+
"phpstan/phpstan": "^1.10",
35+
"phpstan/phpstan-symfony": "^1.3",
36+
"spryker/code-sniffer": "^0.17.19"
37+
},
38+
"config": {
39+
"sort-packages": true,
40+
"platform": {
41+
"php": "8.1"
42+
},
43+
"allow-plugins": {
44+
"php-http/discovery": true,
45+
"dealerdirect/phpcodesniffer-composer-installer": true
46+
}
47+
},
48+
"scripts": {
49+
"cs-check": "phpcs",
50+
"cs-fix": "phpcbf",
51+
"stan": "phpstan --memory-limit=-1 analyze src/"
52+
}
53+
}

0 commit comments

Comments
 (0)