Skip to content

Commit

Permalink
#1 - initialize project (#2)
Browse files Browse the repository at this point in the history
* #1 - added simple setup of package with tests, codestyle and environment stuff

* #1 - wip: moved shell commands to php methods

* #1 - rollback to option with bash script, added readme

* #1 - wip: added helper class, updated tests and readme

* #1 - ci fix

* #1 - ci fix

* #1 - ci fix

* #1 - composer php update

* #1 - ci update

* #1 - ci update

* Apply suggestions from code review

Co-authored-by: Ewelina Skrzypacz <[email protected]>

* #1 - cr fixes

* #1 - cr fixes

* #1 - cr fix

---------

Co-authored-by: Ewelina Skrzypacz <[email protected]>
  • Loading branch information
kamilpiech97 and EwelinaSkrzypacz authored May 6, 2024
1 parent 0240ef7 commit 3a5eaa3
Show file tree
Hide file tree
Showing 16 changed files with 495 additions and 0 deletions.
12 changes: 12 additions & 0 deletions .github/workflows/check-pr-title.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: Check PR Title
on:
pull_request:
branches: [ "main" ]
types: [opened, edited, synchronize, ready_for_review, reopened]

jobs:
check-pr-title:
name: Check PR title
runs-on: ubuntu-22.04
steps:
- uses: blumilksoftware/[email protected]
47 changes: 47 additions & 0 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Test & lint PHP codebase

on:
pull_request:
branches: [ "main" ]
types: [opened, synchronize, reopened, ready_for_review]
paths:
- '**.php'
- 'composer.json'
- 'composer.lock'
- 'phpunit.xml'

jobs:
test-and-lint-php:
name: Test & lint PHP codebase
timeout-minutes: 10
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest

steps:
- uses: actions/[email protected]

- name: Validate composer.json and composer.lock
run: composer validate

- name: Cache dependencies
uses: actions/[email protected]
with:
path: vendor
key: ${{ runner.os }}-composer-dependencies-${{ hashFiles('composer.lock') }}
restore-keys: ${{ runner.os }}-composer-dependencies

- name: Setup PHP
uses: shivammathur/[email protected]
with:
php-version: 8.3
extensions: dom, curl, libxml, mbstring, zip, pcntl, intl
coverage: none

- name: Install dependencies
run: composer install --prefer-dist --no-progress

- name: Run code style checker
run: composer cs

- name: Run tests
run: composer test
35 changes: 35 additions & 0 deletions .github/workflows/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
version: 2

updates:
- package-ecosystem: composer
directory: "/"
schedule:
interval: monthly
time: "06:30"
timezone: "Europe/Warsaw"
commit-message:
prefix: "- (php) "
target-branch: main
open-pull-requests-limit: 1

- package-ecosystem: github-actions
directory: "/"
schedule:
interval: monthly
time: "06:30"
timezone: "Europe/Warsaw"
commit-message:
prefix: "- (github actions) "
target-branch: main
open-pull-requests-limit: 1

- package-ecosystem: docker
directory: "/"
schedule:
interval: monthly
time: "06:30"
timezone: "Europe/Warsaw"
commit-message:
prefix: "- (docker dev) "
target-branch: main
open-pull-requests-limit: 1
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/.composer
/.idea
/vendor

composer.lock
.env
26 changes: 26 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
.PHONY: shell
shell:
docker compose exec php bash

.PHONY: test
test:
docker compose exec php composer test

.PHONY: csf
csf:
docker compose exec php composer csf

.PHONY: run
run:
docker compose up -d

.PHONY: build
build:
docker compose build

.PHONY: stop
stop:
docker compose stop

.PHONY: restart
restart: stop run
14 changes: 14 additions & 0 deletions codestyle.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php

declare(strict_types=1);

use Blumilk\Codestyle\Config;
use Blumilk\Codestyle\Configuration\Defaults\Paths;

$paths = new Paths("src", "tests");

$config = new Config(
paths: $paths,
);

return $config->config();
34 changes: 34 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "blumilksoftware/version",
"description": "Blumilk versioning package",
"license": "MIT",
"type": "library",
"require": {
"php": "^8.3",
"symfony/process": "v7.0.7"
},
"require-dev": {
"blumilksoftware/codestyle": "^v3.0.0",
"phpunit/phpunit": "^11.0.9"
},
"authors": [
{
"name": "Kamil Piech",
"email": "[email protected]"
}
],
"config": {
"optimize-autoloader": true,
"sort-packages": true
},
"autoload": {
"psr-4": {
"Blumilk\\Version\\": "src/"
}
},
"scripts": {
"cs": "./vendor/bin/php-cs-fixer fix --dry-run --diff --config codestyle.php",
"csf": "./vendor/bin/php-cs-fixer fix --diff --config codestyle.php",
"test": "./vendor/bin/phpunit tests --colors=always"
}
}
10 changes: 10 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
services:
php:
container_name: blumilk-version
build:
context: environment/php
tty: true
working_dir: /application
user: ${CURRENT_UID:-1000}
volumes:
- .:/application
12 changes: 12 additions & 0 deletions environment/php/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
ARG PHP_VERSION=8.3.6-cli-bookworm
ARG COMPOSER_TAG_VERSION=2.7.4-bin

FROM composer/composer:${COMPOSER_TAG_VERSION} AS composer_binary

FROM php:${PHP_VERSION}

COPY --from=composer_binary /composer /usr/bin/composer

RUN apt-get update && apt-get install -y git zip \
&& apt-get install -y libzip-dev \
&& docker-php-ext-install zip
81 changes: 81 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
@@ -1 +1,82 @@
[![Packagist PHP Version Support](https://img.shields.io/packagist/php-v/blumilksoftware/version?style=for-the-badge)](https://packagist.org/packages/blumilksoftware/version)
[![Packagist Version](https://img.shields.io/packagist/v/blumilksoftware/version?style=for-the-badge)](https://packagist.org/packages/blumilksoftware/version)
[![Packagist Downloads](https://img.shields.io/packagist/dt/blumilksoftware/version?style=for-the-badge)](https://packagist.org/packages/blumilksoftware/version/stats)

## blumilksoftware/version
A versioning based on git for all Blumilk projects. If Git is not available, it falls back to the timestamp.

### Usage
Add package to the project:
```shell
composer require blumilksoftware/version
```

Then use the `Version` class to generate version strings based on Git or timestamp:
```php
<?php

declare(strict_types=1);

use Blumilk\Version\Version;

$version = (new Version())->generate();
```

#### Configuration
You can configure the `Version` class to generate long version strings:
```php
<?php

declare(strict_types=1);

use Blumilk\Version\Version;

$version = (new Version(true))->generate();
```
#### Helper class
You can use also the `VersionHelper` class to generate version strings:
```php
<?php

declare(strict_types=1);

use Blumilk\Version\VersionHelper;

$shortVersion = VersionHelper::generateShortVersion();
$longVersion = VersionHelper::generateLongVersion();
```
### Contributing
In a cloned or forked repository, run:
```shell
composer install
```

There are scripts available for package codestyle checking and testing:

| Command | Description |
|-----------------|--------------------------------------------------------------|
| `composer cs` | Runs codestyle against the package itself |
| `composer csf` | Runs codestyle with fixer enabled against the package itself |
| `composer test` | Runs all test cases |

There is also the Docker Compose configuration available:
```shell
docker compose up -d
docker compose exec php php -v
docker compose exec php composer -v
```

There are also Makefile commands available:
```shell
make run
make shell
make test
make csf
make stop
```

Please maintain our project guidelines:
* keep issues well described, labeled and in English,
* add the issue number to all your commits,
* add the issue number to your branch name,
* squash your commits into one commit with a standardized name.
48 changes: 48 additions & 0 deletions src/Version.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

declare(strict_types=1);

namespace Blumilk\Version;

use Symfony\Component\Process\Process;

class Version
{
public const string SCRIPTS_DIRECTORY = "src/scripts/";

public function __construct(
public bool $long = false,
) {}

public function setLong(bool $long): void
{
$this->long = $long;
}

public function generate(): string
{
return (new Process(["./check.sh"], self::SCRIPTS_DIRECTORY))->run()
? $this->getVersionBasedOnGit()
: $this->getVersionBasedOnTimestamp();
}

private function getVersionBasedOnGit(): string
{
$process = new Process(["./version.sh"], self::SCRIPTS_DIRECTORY);

if ($this->long) {
$process = new Process(["./version.sh", "--long"], self::SCRIPTS_DIRECTORY);
}

$process->mustRun();

return $process->isSuccessful()
? $process->getOutput()
: $this->getVersionBasedOnTimestamp();
}

private function getVersionBasedOnTimestamp(): string
{
return (string)time();
}
}
18 changes: 18 additions & 0 deletions src/VersionHelper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

declare(strict_types=1);

namespace Blumilk\Version;

class VersionHelper
{
public static function generateShortVersion(): string
{
return (new Version())->generate();
}

public static function generateLongVersion(): string
{
return (new Version(long: true))->generate();
}
}
14 changes: 14 additions & 0 deletions src/scripts/check.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env sh

isGitRepo() {
git rev-parse --is-inside-work-tree >/dev/null 2>&1
}

isGitRepo
if [ $? -gt 0 ]; then
echo "Not a git repository."
return 0
fi

echo "Git repository detected."
return 1
Loading

0 comments on commit 3a5eaa3

Please sign in to comment.