Logo of Sweep
Upgrade and refactor for PHP 8.3 and Laravel 11liberu-accounting/accounting-laravel#49

> > >

✓ Completed in 13 minutes, 3 months ago using GPT-4  •   Book a call  •   Report a bug


Progress

  Modifycomposer.json 

Changed composer.json in cb6cc97    

8 ],8 ],
9 "license": "MIT",9 "license": "MIT",
10 "require": {10 "require": {
11 "php": "^8.2",11 "php": "^8.3",
12 "filament/filament": "^3.2",12 "filament/filament": "^3.2",
13 "guzzlehttp/guzzle": "^7.8",13 "guzzlehttp/guzzle": "^7.8",
14 "laravel/framework": "dev-master",14 "laravel/framework": "^11.0",
15 "laravel/octane": "^2.3",15 "laravel/octane": "^2.3",
16 "laravel/sanctum": "dev-master",16 "laravel/sanctum": "dev-master",
17 "laravel/tinker": "^2.9",17 "laravel/tinker": "^2.9",
  • Update the "php" requirement to "^8.3" to explicitly require PHP 8.3.
  • Change the "laravel/framework" version to "^11.0" to upgrade to Laravel 11.
  • Ensure all other dependencies listed under "require" and "require-dev" are compatible with PHP 8.3 and Laravel 11. This may involve updating versions of packages like "filament/filament", "laravel/octane", "laravel/sanctum", and others as necessary.
  • After modifying composer.json, run "composer update" to update the dependencies.
  Run GitHub Actions forcomposer.json 
  ModifyDockerfile 
1# Accepted values: 8.3 - 8.2
2ARG PHP_VERSION=8.3
3
4ARG COMPOSER_VERSION=latest
5
6###########################################
7# Build frontend assets with NPM
8###########################################
9
10ARG NODE_VERSION=20-alpine
11
12FROM node:${NODE_VERSION} AS build
13
14ENV ROOT=/var/www/html
15
16WORKDIR ${ROOT}
17
18RUN npm config set update-notifier false && npm set progress=false
19
20COPY package*.json ./
21
22RUN if [ -f $ROOT/package-lock.json ]; \
23  then \
24    npm ci --loglevel=error --no-audit; \
25  else \
26    npm install --loglevel=error --no-audit; \
27  fi
28
29COPY . .
30
31RUN npm run build
32
33###########################################
34
35FROM composer:${COMPOSER_VERSION} AS vendor
36
37FROM php:${PHP_VERSION}-cli-bookworm AS base
38
39LABEL maintainer="Curtis Delicat <curtis.delicata@liberu.co.uk"
40LABEL org.opencontainers.image.title="Liberu Genealogy Dockerfile"
41LABEL org.opencontainers.image.description="Production-ready Dockerfile for Liberu Genealogy"
42LABEL org.opencontainers.image.source=https://github.com/liberu-genealogy/genealogy-laravel
43LABEL org.opencontainers.image.licenses=MIT
44
45ARG WWWUSER=1000
46ARG WWWGROUP=1000
47ARG TZ=UTC
48
49ENV DEBIAN_FRONTEND=noninteractive \
50  TERM=xterm-color \
51  WITH_HORIZON=false \
52  WITH_SCHEDULER=false \
53  OCTANE_SERVER=swoole \
54  USER=octane \
55  ROOT=/var/www/html \
56  COMPOSER_FUND=0 \
57  COMPOSER_MAX_PARALLEL_HTTP=24
58
59WORKDIR ${ROOT}
60
61SHELL ["/bin/bash", "-eou", "pipefail", "-c"]
62
63RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \
64  && echo ${TZ} > /etc/timezone
65
66ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
67
68RUN apt-get update; \
69  apt-get upgrade -yqq; \
70  apt-get install -yqq --no-install-recommends --show-progress \
71  apt-utils \
72  curl \
73  wget \
74  nano \
75  ncdu \
76  ca-certificates \
77  supervisor \
78  libsodium-dev \
79  # Install PHP extensions
80  && install-php-extensions \
81  bz2 \
82  pcntl \
83  mbstring \
84  bcmath \
85  sockets \
86  pgsql \
87  pdo_pgsql \
88  opcache \
89  exif \
90  pdo_mysql \
91  zip \
92  intl \
93  gd \
94  redis \
95  rdkafka \
96  memcached \
97  igbinary \
98  ldap \
99  swoole \
100  && apt-get -y autoremove \
101  && apt-get clean \
102  && docker-php-source delete \
103  && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
104  && rm /var/log/lastlog /var/log/faillog
105
106RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/supercronic-linux-amd64" \
107  -O /usr/bin/supercronic \
108  && chmod +x /usr/bin/supercronic \
109  && mkdir -p /etc/supercronic \
110  && echo "*/1 * * * * php ${ROOT}/artisan schedule:run --verbose --no-interaction" > /etc/supercronic/laravel
111
112RUN userdel --remove --force www-data \
113  && groupadd --force -g ${WWWGROUP} ${USER} \
114  && useradd -ms /bin/bash --no-log-init --no-user-group -g ${WWWGROUP} -u ${WWWUSER} ${USER}
115
116RUN chown -R ${USER}:${USER} ${ROOT} /var/{log,run} \
117  && chmod -R a+rw /var/{log,run}
118
119RUN cp ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini
120
121USER ${USER}
122
123COPY --chown=${USER}:${USER} --from=vendor /usr/bin/composer /usr/bin/composer
124COPY --chown=${USER}:${USER} composer.json composer.lock ./
125
126RUN composer install \
127  --no-dev \
128  --no-interaction \
129  --no-autoloader \
130  --no-ansi \
131  --no-scripts \
132  --audit
133
134COPY --chown=${USER}:${USER} . .
135COPY --chown=${USER}:${USER} --from=build ${ROOT}/public public
136
137RUN mkdir -p \
138  storage/framework/{sessions,views,cache,testing} \
139  storage/logs \
140  bootstrap/cache && chmod -R a+rw storage
141
142COPY --chown=${USER}:${USER} .docker/octane/Swoole/supervisord.swoole.conf /etc/supervisor/conf.d/
143COPY --chown=${USER}:${USER} .docker/supervisord.*.conf /etc/supervisor/conf.d/
144COPY --chown=${USER}:${USER} .docker/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini
145COPY --chown=${USER}:${USER} .docker/start-container /usr/local/bin/start-container
146
147RUN composer install \
148  --classmap-authoritative \
149  --no-interaction \
150  --no-ansi \
151  --no-dev \
152  && composer clear-cache \
153  && php artisan storage:link
154
155RUN chmod +x /usr/local/bin/start-container
156
157RUN cat .docker/utilities.sh >> ~/.bashrc
158
159EXPOSE 80
160
161ENTRYPOINT ["start-container"]
162
163HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD php artisan octane:status || exit 1
164
  • Change the ARG PHP_VERSION value to 8.3 to ensure the Docker environment uses PHP 8.3, aligning with the application's upgrade.
  • Verify that all PHP extensions installed via the "install-php-extensions" script are compatible with PHP 8.3. Adjust as necessary to ensure compatibility.
  Run GitHub Actions forDockerfile 
  Modifyconfig/app.php 
1<?php
2
3use Illuminate\Support\Facades\Facade;
4use Illuminate\Support\ServiceProvider;
5
6return [
7
8    /*
9    |--------------------------------------------------------------------------
10    | Application Name
11    |--------------------------------------------------------------------------
12    |
13    | This value is the name of your application. This value is used when the
14    | framework needs to place the application's name in a notification or
15    | any other location as required by the application or its packages.
16    |
17    */
18
19    'name' => env('APP_NAME', 'Laravel'),
20
21    /*
22    |--------------------------------------------------------------------------
23    | Application Environment
24    |--------------------------------------------------------------------------
25    |
26    | This value determines the "environment" your application is currently
27    | running in. This may determine how you prefer to configure various
28    | services the application utilizes. Set this in your ".env" file.
29    |
30    */
31
32    'env' => env('APP_ENV', 'production'),
33
34    /*
35    |--------------------------------------------------------------------------
36    | Application Debug Mode
37    |--------------------------------------------------------------------------
38    |
39    | When your application is in debug mode, detailed error messages with
40    | stack traces will be shown on every error that occurs within your
41    | application. If disabled, a simple generic error page is shown.
42    |
43    */
44
45    'debug' => (bool) env('APP_DEBUG', false),
46
47    /*
48    |--------------------------------------------------------------------------
49    | Application URL
50    |--------------------------------------------------------------------------
51    |
52    | This URL is used by the console to properly generate URLs when using
53    | the Artisan command line tool. You should set this to the root of
54    | your application so that it is used when running Artisan tasks.
55    |
56    */
57
58    'url' => env('APP_URL', 'http://localhost'),
59
60    'asset_url' => env('ASSET_URL'),
61
62    /*
63    |--------------------------------------------------------------------------
64    | Application Timezone
65    |--------------------------------------------------------------------------
66    |
67    | Here you may specify the default timezone for your application, which
68    | will be used by the PHP date and date-time functions. We have gone
69    | ahead and set this to a sensible default for you out of the box.
70    |
71    */
72
73    'timezone' => 'UTC',
74
75    /*
76    |--------------------------------------------------------------------------
77    | Application Locale Configuration
78    |--------------------------------------------------------------------------
79    |
80    | The application locale determines the default locale that will be used
81    | by the translation service provider. You are free to set this value
82    | to any of the locales which will be supported by the application.
83    |
84    */
85
86    'locale' => 'en',
87
88    /*
89    |--------------------------------------------------------------------------
90    | Application Fallback Locale
91    |--------------------------------------------------------------------------
92    |
93    | The fallback locale determines the locale to use when the current one
94    | is not available. You may change the value to correspond to any of
95    | the language folders that are provided through your application.
96    |
97    */
98
99    'fallback_locale' => 'en',
100
101    /*
102    |--------------------------------------------------------------------------
103    | Faker Locale
104    |--------------------------------------------------------------------------
105    |
106    | This locale will be used by the Faker PHP library when generating fake
107    | data for your database seeds. For example, this will be used to get
108    | localized telephone numbers, street address information and more.
109    |
110    */
111
112    'faker_locale' => 'en_US',
113
114    /*
115    |--------------------------------------------------------------------------
116    | Encryption Key
117    |--------------------------------------------------------------------------
118    |
119    | This key is used by the Illuminate encrypter service and should be set
120    | to a random, 32 character string, otherwise these encrypted strings
121    | will not be safe. Please do this before deploying an application!
122    |
123    */
124
125    'key' => env('APP_KEY'),
126
127    'cipher' => 'AES-256-CBC',
128
129    /*
130    |--------------------------------------------------------------------------
131    | Maintenance Mode Driver
132    |--------------------------------------------------------------------------
133    |
134    | These configuration options determine the driver used to determine and
135    | manage Laravel's "maintenance mode" status. The "cache" driver will
136    | allow maintenance mode to be controlled across multiple machines.
137    |
138    | Supported drivers: "file", "cache"
139    |
140    */
141
142    'maintenance' => [
143        'driver' => 'file',
144        // 'store' => 'redis',
145    ],
146
147    /*
148    |--------------------------------------------------------------------------
149    | Autoloaded Service Providers
150    |--------------------------------------------------------------------------
151    |
152    | The service providers listed here will be automatically loaded on the
153    | request to your application. Feel free to add your own services to
154    | this array to grant expanded functionality to your applications.
155    |
156    */
157
158    'providers' => ServiceProvider::defaultProviders()->merge([
159        /*
160         * Package Service Providers...
161         */
162
163        /*
164         * Application Service Providers...
165         */
166        App\Providers\AppServiceProvider::class,
167        App\Providers\AuthServiceProvider::class,
168        // App\Providers\BroadcastServiceProvider::class,
169        App\Providers\EventServiceProvider::class,
170        App\Providers\Filament\AdminPanelProvider::class,
171        App\Providers\RouteServiceProvider::class,
172    ])->toArray(),
173
174    /*
175    |--------------------------------------------------------------------------
176    | Class Aliases
177    |--------------------------------------------------------------------------
178    |
179    | This array of class aliases will be registered when this application
180    | is started. However, feel free to register as many as you wish as
181    | the aliases are "lazy" loaded so they don't hinder performance.
182    |
183    */
184
185    'aliases' => Facade::defaultAliases()->merge([
186        // 'Example' => App\Facades\Example::class,
187    ])->toArray(),
188
189];
190
  • Review and update the configuration settings to ensure compatibility with Laravel 11. This includes checking for any new configuration options introduced in Laravel 11 and adjusting existing settings as necessary.
  • Specifically, verify the 'providers' and 'aliases' arrays to ensure all referenced service providers and facades are compatible with Laravel 11.
  Run GitHub Actions forconfig/app.php 
  Modifyconfig/database.php 
1<?php
2
3use Illuminate\Support\Str;
4
5return [
6
7    /*
8    |--------------------------------------------------------------------------
9    | Default Database Connection Name
10    |--------------------------------------------------------------------------
11    |
12    | Here you may specify which of the database connections below you wish
13    | to use as your default connection for all database work. Of course
14    | you may use many connections at once using the Database library.
15    |
16    */
17
18    'default' => env('DB_CONNECTION', 'mysql'),
19
20    /*
21    |--------------------------------------------------------------------------
22    | Database Connections
23    |--------------------------------------------------------------------------
24    |
25    | Here are each of the database connections setup for your application.
26    | Of course, examples of configuring each database platform that is
27    | supported by Laravel is shown below to make development simple.
28    |
29    |
30    | All database work in Laravel is done through the PHP PDO facilities
31    | so make sure you have the driver for your particular database of
32    | choice installed on your machine before you begin development.
33    |
34    */
35
36    'connections' => [
37
38        'sqlite' => [
39            'driver' => 'sqlite',
40            'url' => env('DATABASE_URL'),
41            'database' => env('DB_DATABASE', database_path('database.sqlite')),
42            'prefix' => '',
43            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
44        ],
45
46        'mysql' => [
47            'driver' => 'mysql',
48            'url' => env('DATABASE_URL'),
49            'host' => env('DB_HOST', '127.0.0.1'),
50            'port' => env('DB_PORT', '3306'),
51            'database' => env('DB_DATABASE', 'forge'),
52            'username' => env('DB_USERNAME', 'forge'),
53            'password' => env('DB_PASSWORD', ''),
54            'unix_socket' => env('DB_SOCKET', ''),
55            'charset' => 'utf8mb4',
56            'collation' => 'utf8mb4_unicode_ci',
57            'prefix' => '',
58            'prefix_indexes' => true,
59            'strict' => true,
60            'engine' => null,
61            'options' => extension_loaded('pdo_mysql') ? array_filter([
62                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
63            ]) : [],
64        ],
65
66        'pgsql' => [
67            'driver' => 'pgsql',
68            'url' => env('DATABASE_URL'),
69            'host' => env('DB_HOST', '127.0.0.1'),
70            'port' => env('DB_PORT', '5432'),
71            'database' => env('DB_DATABASE', 'forge'),
72            'username' => env('DB_USERNAME', 'forge'),
73            'password' => env('DB_PASSWORD', ''),
74            'charset' => 'utf8',
75            'prefix' => '',
76            'prefix_indexes' => true,
77            'search_path' => 'public',
78            'sslmode' => 'prefer',
79        ],
80
81        'sqlsrv' => [
82            'driver' => 'sqlsrv',
83            'url' => env('DATABASE_URL'),
84            'host' => env('DB_HOST', 'localhost'),
85            'port' => env('DB_PORT', '1433'),
86            'database' => env('DB_DATABASE', 'forge'),
87            'username' => env('DB_USERNAME', 'forge'),
88            'password' => env('DB_PASSWORD', ''),
89            'charset' => 'utf8',
90            'prefix' => '',
91            'prefix_indexes' => true,
92            // 'encrypt' => env('DB_ENCRYPT', 'yes'),
93            // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
94        ],
95
96    ],
97
98    /*
99    |--------------------------------------------------------------------------
100    | Migration Repository Table
101    |--------------------------------------------------------------------------
102    |
103    | This table keeps track of all the migrations that have already run for
104    | your application. Using this information, we can determine which of
105    | the migrations on disk haven't actually been run in the database.
106    |
107    */
108
109    'migrations' => 'migrations',
110
111    /*
112    |--------------------------------------------------------------------------
113    | Redis Databases
114    |--------------------------------------------------------------------------
115    |
116    | Redis is an open source, fast, and advanced key-value store that also
117    | provides a richer body of commands than a typical key-value system
118    | such as APC or Memcached. Laravel makes it easy to dig right in.
119    |
120    */
121
122    'redis' => [
123
124        'client' => env('REDIS_CLIENT', 'phpredis'),
125
126        'options' => [
127            'cluster' => env('REDIS_CLUSTER', 'redis'),
128            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
129        ],
130
131        'default' => [
132            'url' => env('REDIS_URL'),
133            'host' => env('REDIS_HOST', '127.0.0.1'),
134            'username' => env('REDIS_USERNAME'),
135            'password' => env('REDIS_PASSWORD'),
136            'port' => env('REDIS_PORT', '6379'),
137            'database' => env('REDIS_DB', '0'),
138        ],
139
140        'cache' => [
141            'url' => env('REDIS_URL'),
142            'host' => env('REDIS_HOST', '127.0.0.1'),
143            'username' => env('REDIS_USERNAME'),
144            'password' => env('REDIS_PASSWORD'),
145            'port' => env('REDIS_PORT', '6379'),
146            'database' => env('REDIS_CACHE_DB', '1'),
147        ],
148
149    ],
150
151];
152
  • Ensure the database configuration is compatible with Laravel 11. This may involve adjusting connection settings or options based on any new database features or changes in Laravel 11.
  • Pay special attention to any new database driver options or deprecations that may affect the application's database connections.
  Run GitHub Actions forconfig/database.php 

Plan

This is based on the results of the Planning step. The plan may expand from failed GitHub Actions runs.

  Modifycomposer.json 
  Run GitHub Actions forcomposer.json 
  ModifyDockerfile 
  Run GitHub Actions forDockerfile 
  Modifyconfig/app.php 
  Run GitHub Actions forconfig/app.php 
  Run GitHub Actions forconfig/database.php 

Code Snippets Found

This is based on the results of the Searching step.

README.md:0-50 
1# Liberu Accounting
2
3![](https://img.shields.io/badge/PHP-8.3-informational?style=flat&logo=php&color=4f5b93)
4![](https://img.shields.io/badge/Laravel-11-informational?style=flat&logo=laravel&color=ef3b2d)
5![](https://img.shields.io/badge/JavaScript-ECMA2020-informational?style=flat&logo=JavaScript&color=F7DF1E)
6![](https://img.shields.io/badge/Livewire-3.0-informational?style=flat&logo=Livewire&color=fb70a9)
7![](https://img.shields.io/badge/Filament-3.2-informational?style=flat&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBkPSJNMCAwaDQ4djQ4SDBWMHoiIGZpbGw9IiNmNGIyNWUiLz48cGF0aCBkPSJNMjggN2wtMSA2LTMuNDM3LjgxM0wyMCAxNWwtMSAzaDZ2NWgtN2wtMyAxOEg4Yy41MTUtNS44NTMgMS40NTQtMTEuMzMgMy0xN0g4di01bDUtMSAuMjUtMy4yNUMxNCAxMSAxNCAxMSAxNS40MzggOC41NjMgMTkuNDI5IDYuMTI4IDIzLjQ0MiA2LjY4NyAyOCA3eiIgZmlsbD0iIzI4MjQxZSIvPjxwYXRoIGQ9Ik0zMCAxOGg0YzIuMjMzIDUuMzM0IDIuMjMzIDUuMzM0IDEuMTI1IDguNUwzNCAyOWMtLjE2OCAzLjIwOS0uMTY4IDMuMjA5IDAgNmwtMiAxIDEgM2gtNXYyaC0yYy44NzUtNy42MjUuODc1LTcuNjI1IDItMTFoMnYtMmgtMnYtMmwyLTF2LTQtM3oiIGZpbGw9IiMyYTIwMTIiLz48cGF0aCBkPSJNMzUuNTYzIDYuODEzQzM4IDcgMzggNyAzOSA4Yy4xODggMi40MzguMTg4IDIuNDM4IDAgNWwtMiAyYy0yLjYyNS0uMzc1LTIuNjI1LS4zNzUtNS0xLS42MjUtMi4zNzUtLjYyNS0yLjM3NS0xLTUgMi0yIDItMiA0LjU2My0yLjE4N3oiIGZpbGw9IiM0MDM5MzEiLz48cGF0aCBkPSJNMzAgMThoNGMyLjA1NSA1LjMxOSAyLjA1NSA1LjMxOSAxLjgxMyA4LjMxM0wzNSAyOGwtMyAxdi0ybC00IDF2LTJsMi0xdi00LTN6IiBmaWxsPSIjMzEyODFlIi8+PHBhdGggZD0iTTI5IDI3aDN2MmgydjJoLTJ2MmwtNC0xdi0yaDJsLTEtM3oiIGZpbGw9IiMxNTEzMTAiLz48cGF0aCBkPSJNMzAgMThoNHYzaC0ydjJsLTMgMSAxLTZ6IiBmaWxsPSIjNjA0YjMyIi8+PC9zdmc+&&color=fdae4b&link=https://filamentphp.com)
8
9### Other active projects
10* https://github.com/liberu-automation/automation-laravel
11* https://github.com/liberu-cms/cms-laravel
12* https://github.com/liberu-crm/crm-laravel
13* https://github.com/liberu-ecommerce/ecommerce-laravel
14* https://github.com/liberu-maintenance/maintenance-laravel
15* https://github.com/liberu-real-estate/real-estate-laravel
16
17### Description
18Welcome to Liberu Accounting, our cutting-edge open-source project that transforms the realm of accounting with the seamless integration of Laravel 11, PHP 8.3, Livewire 3, and Filament 3. Liberu Accounting is not just a financial tool; it's a dynamic and robust solution crafted to elevate the accounting experience for businesses and individuals alike.
19
20Liberu Accounting is open source, released under the permissive MIT license. We invite accountants, businesses, and developers to contribute to the evolution of financial management tools. Harness the power of technology to revolutionize the way we handle finances, ensuring accuracy, transparency, and adaptability in a rapidly changing business environment.
21
22Welcome to Liberu Accounting – where innovation meets financial excellence. Join us in shaping the future of accounting technology and empowering users to take control of their financial destinies.
23
24### Licensed under MIT, use for any personal or commercial project.
25
26## Key Features:
27
28Multi-Module Integration:
29Liberu Accounting seamlessly integrates core accounting modules, including general ledger, accounts payable, accounts receivable, payroll, inventory management, fixed assets, and more. This integration ensures a cohesive financial management system for comprehensive business insight.
30
31User-Friendly Interface:
32The software boasts an intuitive and user-friendly interface, making it accessible to both accounting professionals and business owners. The intuitive design streamlines data entry and navigation, reducing the learning curve and boosting productivity.
33
34Customization and Scalability:
35Liberu Accounting allows for extensive customization to adapt to the unique needs of different businesses. From custom chart of accounts to personalized reports and dashboards, users can tailor the software to fit their specific requirements. Moreover, the software is scalable to grow alongside the business, accommodating increasing data volumes and evolving needs.
36
37Real-time Financial Reporting:
38Access to real-time financial reports and analytics is a core feature of Liberu Accounting. Users can generate detailed financial statements, cash flow forecasts, balance sheets, and profit and loss statements with just a few clicks, enabling informed decision-making at any given moment.
39
40Automation and AI Integration:
41Leveraging artificial intelligence (AI) and automation, Liberu Accounting automates routine accounting tasks such as data entry, reconciliation, and categorization. This results in enhanced accuracy, efficiency, and reduced manual workload, allowing users to focus on strategic financial initiatives.
42
43Compliance and Security:
44Liberu Accounting ensures adherence to the latest accounting standards and compliance requirements. With robust data encryption, role-based access controls, and regular security updates, the software provides a secure environment to handle sensitive financial information.
45
46Multi-platform Accessibility:
47Users can access Liberu Accounting from various devices, including desktop computers, laptops, tablets, and smartphones. The software supports both web-based and mobile applications, enabling flexibility and convenience for on-the-go accounting management.
48
49Collaboration and Communication:
50Facilitating collaboration within teams and external stakeholders, Liberu Accounting offers features for real-time communication, file sharing, and task management. This fosters efficient teamwork and ensures everyone stays aligned on financial goals and objectives.
composer.json:0-73 
1{
2    "name": "laravel/laravel",
3    "type": "project",
4    "description": "The skeleton application for the Laravel framework.",
5    "keywords": [
6        "laravel",
7        "framework"
8    ],
9    "license": "MIT",
10    "require": {
11        "php": "^8.2",
12        "filament/filament": "^3.2",
13        "guzzlehttp/guzzle": "^7.8",
14        "laravel/framework": "dev-master",
15        "laravel/octane": "^2.3",
16        "laravel/sanctum": "dev-master",
17        "laravel/tinker": "^2.9",
18        "spiral/roadrunner-cli": "^2.6.0",
19        "spiral/roadrunner-http": "^3.3.0"
20    },
21    "require-dev": {
22        "fakerphp/faker": "^1.23",
23        "laravel/pint": "^1.14",
24        "laravel/sail": "^1.28",
25        "mockery/mockery": "^1.6",
26        "nunomaduro/collision": "^8.0",
27        "phpunit/phpunit": "^11.0",
28        "spatie/laravel-ignition": "^2.4"
29    },
30    "autoload": {
31        "psr-4": {
32            "App\\": "app/",
33            "Database\\Factories\\": "database/factories/",
34            "Database\\Seeders\\": "database/seeders/"
35        }
36    },
37    "autoload-dev": {
38        "psr-4": {
39            "Tests\\": "tests/"
40        }
41    },
42    "scripts": {
43        "post-autoload-dump": [
44            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
45            "@php artisan package:discover --ansi",
46            "@php artisan filament:upgrade"
47        ],
48        "post-update-cmd": [
49            "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
50        ],
51        "post-root-package-install": [
52            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
53        ],
54        "post-create-project-cmd": [
55            "@php artisan key:generate --ansi"
56        ]
57    },
58    "extra": {
59        "laravel": {
60            "dont-discover": []
61        }
62    },
63    "config": {
64        "optimize-autoloader": true,
65        "preferred-install": "dist",
66        "sort-packages": true,
67        "allow-plugins": {
68            "pestphp/pest-plugin": true,
69            "php-http/discovery": true
70        }
71    },
72    "minimum-stability": "stable",
73    "prefer-stable": true
Dockerfile:0-162 
1# Accepted values: 8.3 - 8.2
2ARG PHP_VERSION=8.3
3
4ARG COMPOSER_VERSION=latest
5
6###########################################
7# Build frontend assets with NPM
8###########################################
9
10ARG NODE_VERSION=20-alpine
11
12FROM node:${NODE_VERSION} AS build
13
14ENV ROOT=/var/www/html
15
16WORKDIR ${ROOT}
17
18RUN npm config set update-notifier false && npm set progress=false
19
20COPY package*.json ./
21
22RUN if [ -f $ROOT/package-lock.json ]; \
23  then \
24    npm ci --loglevel=error --no-audit; \
25  else \
26    npm install --loglevel=error --no-audit; \
27  fi
28
29COPY . .
30
31RUN npm run build
32
33###########################################
34
35FROM composer:${COMPOSER_VERSION} AS vendor
36
37FROM php:${PHP_VERSION}-cli-bookworm AS base
38
39LABEL maintainer="Curtis Delicat <curtis.delicata@liberu.co.uk"
40LABEL org.opencontainers.image.title="Liberu Genealogy Dockerfile"
41LABEL org.opencontainers.image.description="Production-ready Dockerfile for Liberu Genealogy"
42LABEL org.opencontainers.image.source=https://github.com/liberu-genealogy/genealogy-laravel
43LABEL org.opencontainers.image.licenses=MIT
44
45ARG WWWUSER=1000
46ARG WWWGROUP=1000
47ARG TZ=UTC
48
49ENV DEBIAN_FRONTEND=noninteractive \
50  TERM=xterm-color \
51  WITH_HORIZON=false \
52  WITH_SCHEDULER=false \
53  OCTANE_SERVER=swoole \
54  USER=octane \
55  ROOT=/var/www/html \
56  COMPOSER_FUND=0 \
57  COMPOSER_MAX_PARALLEL_HTTP=24
58
59WORKDIR ${ROOT}
60
61SHELL ["/bin/bash", "-eou", "pipefail", "-c"]
62
63RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \
64  && echo ${TZ} > /etc/timezone
65
66ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
67
68RUN apt-get update; \
69  apt-get upgrade -yqq; \
70  apt-get install -yqq --no-install-recommends --show-progress \
71  apt-utils \
72  curl \
73  wget \
74  nano \
75  ncdu \
76  ca-certificates \
77  supervisor \
78  libsodium-dev \
79  # Install PHP extensions
80  && install-php-extensions \
81  bz2 \
82  pcntl \
83  mbstring \
84  bcmath \
85  sockets \
86  pgsql \
87  pdo_pgsql \
88  opcache \
89  exif \
90  pdo_mysql \
91  zip \
92  intl \
93  gd \
94  redis \
95  rdkafka \
96  memcached \
97  igbinary \
98  ldap \
99  swoole \
100  && apt-get -y autoremove \
101  && apt-get clean \
102  && docker-php-source delete \
103  && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
104  && rm /var/log/lastlog /var/log/faillog
105
106RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/supercronic-linux-amd64" \
107  -O /usr/bin/supercronic \
108  && chmod +x /usr/bin/supercronic \
109  && mkdir -p /etc/supercronic \
110  && echo "*/1 * * * * php ${ROOT}/artisan schedule:run --verbose --no-interaction" > /etc/supercronic/laravel
111
112RUN userdel --remove --force www-data \
113  && groupadd --force -g ${WWWGROUP} ${USER} \
114  && useradd -ms /bin/bash --no-log-init --no-user-group -g ${WWWGROUP} -u ${WWWUSER} ${USER}
115
116RUN chown -R ${USER}:${USER} ${ROOT} /var/{log,run} \
117  && chmod -R a+rw /var/{log,run}
118
119RUN cp ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini
120
121USER ${USER}
122
123COPY --chown=${USER}:${USER} --from=vendor /usr/bin/composer /usr/bin/composer
124COPY --chown=${USER}:${USER} composer.json composer.lock ./
125
126RUN composer install \
127  --no-dev \
128  --no-interaction \
129  --no-autoloader \
130  --no-ansi \
131  --no-scripts \
132  --audit
133
134COPY --chown=${USER}:${USER} . .
135COPY --chown=${USER}:${USER} --from=build ${ROOT}/public public
136
137RUN mkdir -p \
138  storage/framework/{sessions,views,cache,testing} \
139  storage/logs \
140  bootstrap/cache && chmod -R a+rw storage
141
142COPY --chown=${USER}:${USER} .docker/octane/Swoole/supervisord.swoole.conf /etc/supervisor/conf.d/
143COPY --chown=${USER}:${USER} .docker/supervisord.*.conf /etc/supervisor/conf.d/
144COPY --chown=${USER}:${USER} .docker/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini
145COPY --chown=${USER}:${USER} .docker/start-container /usr/local/bin/start-container
146
147RUN composer install \
148  --classmap-authoritative \
149  --no-interaction \
150  --no-ansi \
151  --no-dev \
152  && composer clear-cache \
153  && php artisan storage:link
154
155RUN chmod +x /usr/local/bin/start-container
156
157RUN cat .docker/utilities.sh >> ~/.bashrc
158
159EXPOSE 80
160
161ENTRYPOINT ["start-container"]
162