Compare commits

...

14 Commits

Author SHA1 Message Date
Andras Bacsai
3c04815da4 chore: Update user for s6-setuidgid command in init-script/up 2024-09-12 21:33:33 +02:00
Andras Bacsai
b053cfeee2 chore: Update user for s6-setuidgid command in init-script/up 2024-09-12 21:28:55 +02:00
Andras Bacsai
930157b5db chore: Remove unnecessary SSH command execution time logging 2024-09-12 21:17:17 +02:00
Andras Bacsai
786b6f11b2 test 2024-09-12 21:16:08 +02:00
Andras Bacsai
0b33315991 Merge pull request #3410 from peaklabs-dev/desing-contributing.md
Feat: Redesigned contributing.md
2024-09-12 18:08:59 +02:00
Andras Bacsai
b6b9179bb3 Merge branch 'next' into desing-contributing.md 2024-09-12 18:08:35 +02:00
Andras Bacsai
9122983f22 Merge pull request #3411 from peaklabs-dev/fix-pr-build-gh-actions
Fix: PR Build GitHub Action
2024-09-12 18:07:59 +02:00
peaklabs-dev
ccdcea665d Update pr-build.yml 2024-09-12 17:09:00 +02:00
peaklabs-dev
7b5aa78557 Update pr-build.yml 2024-09-12 17:03:04 +02:00
Andras Bacsai
e38b29d833 chore: Update release version to 4.0.0-beta.336 2024-09-12 15:04:24 +02:00
peaklabs-dev
d4679a8be1 Merge branch 'coollabsio:main' into desing-contributing.md 2024-09-12 13:03:39 +02:00
peaklabs-dev
410b55cf03 Update CONTRIBUTING.md 2024-09-11 14:39:24 +02:00
peaklabs-dev
0881d001d6 Update CONTRIBUTING.md 2024-09-11 14:34:37 +02:00
peaklabs-dev
483b4f8eb7 Update CONTRIBUTING.md 2024-09-11 14:31:35 +02:00
15 changed files with 125 additions and 85 deletions

View File

@@ -21,6 +21,7 @@ jobs:
packages: write packages: write
attestations: write attestations: write
id-token: write id-token: write
actions: write
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Login to ghcr.io - name: Login to ghcr.io
@@ -44,6 +45,7 @@ jobs:
packages: write packages: write
attestations: write attestations: write
id-token: write id-token: write
actions: write
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Login to ghcr.io - name: Login to ghcr.io
@@ -67,6 +69,7 @@ jobs:
packages: write packages: write
attestations: write attestations: write
id-token: write id-token: write
actions: write
needs: [amd64, aarch64] needs: [amd64, aarch64]
steps: steps:
- name: Checkout - name: Checkout

View File

@@ -1,17 +1,27 @@
# Contributing # Contributing to Coolify
> "First, thanks for considering contributing to my project. It really means a lot!" - [@andrasbacsai](https://github.com/andrasbacsai) > "First, thanks for considering contributing to my project. It really means a lot!" - [@andrasbacsai](https://github.com/andrasbacsai)
You can ask for guidance anytime on our [Discord server](https://coollabs.io/discord) in the `#contribute` channel. You can ask for guidance anytime on our [Discord server](https://coollabs.io/discord) in the `#contribute` channel.
## Table of Contents
## Code Contribution 1. [Setup Development Environment](#1-setup-development-environment)
2. [Verify Installation](#2-verify-installation-optional)
3. [Fork and Setup Local Repository](#3-fork-and-setup-local-repository)
4. [Set up Environment Variables](#4-set-up-environment-variables)
5. [Start Coolify](#5-start-coolify)
6. [Start Development](#6-start-development)
7. [Development Notes](#7-development-notes)
8. [Create a Pull Request](#8-create-a-pull-request)
9. [Additional Contribution Guidelines](#additional-contribution-guidelines)
## 1. Setup your development environment ## 1. Setup Development Environment
Follow the steps below for your operating system: Follow the steps below for your operating system:
### Windows <details>
<summary><strong>Windows</strong></summary>
1. Install `docker-ce`, Docker Desktop (or similar): 1. Install `docker-ce`, Docker Desktop (or similar):
- Docker CE (recommended): - Docker CE (recommended):
@@ -25,7 +35,10 @@ Follow the steps below for your operating system:
2. Install Spin: 2. Install Spin:
- Follow the instructions to install Spin on Windows from the [Spin documentation](https://serversideup.net/open-source/spin/docs/installation/install-windows#download-and-install-spin-into-wsl2) - Follow the instructions to install Spin on Windows from the [Spin documentation](https://serversideup.net/open-source/spin/docs/installation/install-windows#download-and-install-spin-into-wsl2)
### MacOS </details>
<details>
<summary><strong>MacOS</strong></summary>
1. Install Orbstack, Docker Desktop (or similar): 1. Install Orbstack, Docker Desktop (or similar):
- Orbstack (recommended, as it is a faster and lighter alternative to Docker Desktop): - Orbstack (recommended, as it is a faster and lighter alternative to Docker Desktop):
@@ -36,7 +49,10 @@ Follow the steps below for your operating system:
2. Install Spin: 2. Install Spin:
- Follow the instructions to install Spin on MacOS from the [Spin documentation](https://serversideup.net/open-source/spin/docs/installation/install-macos/#download-and-install-spin) - Follow the instructions to install Spin on MacOS from the [Spin documentation](https://serversideup.net/open-source/spin/docs/installation/install-macos/#download-and-install-spin)
### Linux </details>
<details>
<summary><strong>Linux</strong></summary>
1. Install Docker Engine, Docker Desktop (or similar): 1. Install Docker Engine, Docker Desktop (or similar):
- Docker Engine (recommended, as there is no VM overhead): - Docker Engine (recommended, as there is no VM overhead):
@@ -47,8 +63,9 @@ Follow the steps below for your operating system:
2. Install Spin: 2. Install Spin:
- Follow the instructions to install Spin on Linux from the [Spin documentation](https://serversideup.net/open-source/spin/docs/installation/install-linux#configure-docker-permissions) - Follow the instructions to install Spin on Linux from the [Spin documentation](https://serversideup.net/open-source/spin/docs/installation/install-linux#configure-docker-permissions)
</details>
## 2. Verify installation (optional) ## 2. Verify Installation (Optional)
After installing Docker (or Orbstack) and Spin, verify the installation: After installing Docker (or Orbstack) and Spin, verify the installation:
@@ -60,25 +77,20 @@ After installing Docker (or Orbstack) and Spin, verify the installation:
``` ```
You should see version information for both Docker and Spin. You should see version information for both Docker and Spin.
## 3. Fork and Setup Local Repository
## 3. Fork the Coolify repository and setup your local repository
1. Fork the [Coolify](https://github.com/coollabsio/coolify) repository to your GitHub account. 1. Fork the [Coolify](https://github.com/coollabsio/coolify) repository to your GitHub account.
2. Install a code editor on your machine (below are some popular choices, choose one): 2. Install a code editor on your machine (choose one):
- Visual Studio Code (recommended free): | Editor | Platform | Download Link |
- Windows/macOS/Linux: Download and install from [https://code.visualstudio.com/download](https://code.visualstudio.com/download) |--------|----------|---------------|
| Visual Studio Code (recommended free) | Windows/macOS/Linux | [Download](https://code.visualstudio.com/download) |
- Cursor (recommended but paid for getting the full benefits): | Cursor (recommended but paid) | Windows/macOS/Linux | [Download](https://www.cursor.com/) |
- Windows/macOS/Linux: Download and install from [https://www.cursor.com/](https://www.cursor.com/) | Zed (very fast) | macOS/Linux | [Download](https://zed.dev/download) |
- Zed (very fast code editor):
- macOS/Linux: Download and install from [https://zed.dev/download](https://zed.dev/download)
- Windows: Not available yet
3. Clone the Coolify Repository from your fork to your local machine 3. Clone the Coolify Repository from your fork to your local machine
- Use `git clone` in the command line - Use `git clone` in the command line, or
- Use GitHub Desktop (recommended): - Use GitHub Desktop (recommended):
- Download and install from [https://desktop.github.com/](https://desktop.github.com/) - Download and install from [https://desktop.github.com/](https://desktop.github.com/)
- Open GitHub Desktop and login with your GitHub account - Open GitHub Desktop and login with your GitHub account
@@ -86,37 +98,32 @@ After installing Docker (or Orbstack) and Spin, verify the installation:
4. Open the cloned Coolify Repository in your chosen code editor. 4. Open the cloned Coolify Repository in your chosen code editor.
## 4. Set up Environment Variables ## 4. Set up Environment Variables
1. In the Code Editor, locate the `.env.development.example` file in the root directory of your local Coolify repository. 1. In the Code Editor, locate the `.env.development.example` file in the root directory of your local Coolify repository.
2. Duplicate the `.env.development.example` file and rename the copy to `.env`. 2. Duplicate the `.env.development.example` file and rename the copy to `.env`.
3. Open the new `.env` file and review its contents. Adjust any environment variables as needed for your development setup. 3. Open the new `.env` file and review its contents. Adjust any environment variables as needed for your development setup.
4. If you encounter errors during database migrations, update the database connection settings in your `.env` file. Use the IP address or hostname of your PostgreSQL database container. You can find this information by running `docker ps` after executing `spin up`. 4. If you encounter errors during database migrations, update the database connection settings in your `.env` file. Use the IP address or hostname of your PostgreSQL database container. You can find this information by running `docker ps` after executing `spin up`.
5. Save the changes to your `.env` file. 5. Save the changes to your `.env` file.
## 5. Start Coolify ## 5. Start Coolify
1. Open a terminal in the local Coolify directory. 1. Open a terminal in the local Coolify directory.
2. Run the following command in the terminal (leave that terminal open): 2. Run the following command in the terminal (leave that terminal open):
``` ```bash
spin up spin up
``` ```
Note: You may see some errors, but don't worry; this is expected.
> [!NOTE]
> You may see some errors, but don't worry; this is expected.
3. If you encounter permission errors, especially on macOS, use: 3. If you encounter permission errors, especially on macOS, use:
``` ```bash
sudo spin up sudo spin up
``` ```
Note: If you change environment variables afterwards or anything seems broken, press Ctrl + C to stop the process and run `spin up` again. > [!NOTE]
> If you change environment variables afterwards or anything seems broken, press Ctrl + C to stop the process and run `spin up` again.
## 6. Start Development ## 6. Start Development
@@ -126,15 +133,17 @@ Note: If you change environment variables afterwards or anything seems broken, p
- Password: `password` - Password: `password`
2. Additional development tools: 2. Additional development tools:
- Laravel Horizon (scheduler): `http://localhost:8000/horizon` | Tool | URL | Note |
Note: Only accessible when logged in as root user |------|-----|------|
- Mailpit (email catcher): `http://localhost:8025` | Laravel Horizon (scheduler) | `http://localhost:8000/horizon` | Only accessible when logged in as root user |
- Telescope (debugging tool): `http://localhost:8000/telescope` | Mailpit (email catcher) | `http://localhost:8025` | |
Note: Disabled by default (so the database is not overloaded), enable by adding the following environment variable to your `.env` file: | Telescope (debugging tool) | `http://localhost:8000/telescope` | Disabled by default |
```env
TELESCOPE_ENABLED=true
```
> [!NOTE]
> To enable Telescope, add the following to your `.env` file:
> ```env
> TELESCOPE_ENABLED=true
> ```
## 7. Development Notes ## 7. Development Notes
@@ -150,18 +159,12 @@ When working on Coolify, keep the following in mind:
docker exec -it coolify php artisan migrate:fresh --seed docker exec -it coolify php artisan migrate:fresh --seed
``` ```
3. **Troubleshooting**: If you encounter unexpected behavior, ensure your database is up-to-date with the latest migrations and if possible reset the development setup to eliminate any envrionement specific issues. 3. **Troubleshooting**: If you encounter unexpected behavior, ensure your database is up-to-date with the latest migrations and if possible reset the development setup to eliminate any environment-specific issues.
Remember, forgetting to migrate the database can cause problems, so make it a habit to run migrations after pulling changes or switching branches. > [!IMPORTANT]
> Forgetting to migrate the database can cause problems, so make it a habit to run migrations after pulling changes or switching branches.
## 8. Create a Pull Request
## 8. Contributing a New Service
To add a new service to Coolify, please refer to our documentation:
[Adding a New Service](https://coolify.io/docs/knowledge-base/add-a-service)
## 9. Create a Pull Request
1. After making changes or adding a new service: 1. After making changes or adding a new service:
- Commit your changes to your forked repository. - Commit your changes to your forked repository.
@@ -179,11 +182,26 @@ To add a new service to Coolify, please refer to our documentation:
- In the description, explain the changes you've made. - In the description, explain the changes you've made.
- Reference any related issues by using keywords like "Fixes #123" or "Closes #456". - Reference any related issues by using keywords like "Fixes #123" or "Closes #456".
4. Important note: > [!IMPORTANT]
Always set the base branch for your PR to the `next` branch of the Coolify repository, not the `main` branch. > Always set the base branch for your PR to the `next` branch of the Coolify repository, not the `main` branch.
5. Submit your PR: 4. Submit your PR:
- Review your changes one last time. - Review your changes one last time.
- Click "Create pull request" to submit. - Click "Create pull request" to submit.
> [!NOTE]
> Make sure your PR is out of draft mode as soon as it's ready for review. PRs that are in draft mode for a long time may be closed by maintainers.
After submission, maintainers will review your PR and may request changes or provide feedback. After submission, maintainers will review your PR and may request changes or provide feedback.
## Additional Contribution Guidelines
### Contributing a New Service
To add a new service to Coolify, please refer to our documentation:
[Adding a New Service](https://coolify.io/docs/knowledge-base/contribute/service)
### Contributing to Documentation
To contribute to the Coolify documentation, please refer to this guide:
[Contributing to the Coolify Documentation](https://github.com/coollabsio/documentation-coolify/blob/main/CONTRIBUTING.md)

View File

@@ -7,7 +7,7 @@ return [
// The release version of your application // The release version of your application
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
'release' => '4.0.0-beta.335', 'release' => '4.0.0-beta.336',
// When left empty or `null` the Laravel environment will be used // When left empty or `null` the Laravel environment will be used
'environment' => config('app.env'), 'environment' => config('app.env'),

View File

@@ -1,3 +1,3 @@
<?php <?php
return '4.0.0-beta.335'; return '4.0.0-beta.336';

View File

@@ -3,11 +3,15 @@ services:
build: build:
context: . context: .
dockerfile: ./docker/dev/Dockerfile dockerfile: ./docker/dev/Dockerfile
args:
USER_ID: "${USERID:-9999}"
GROUP_ID: "${GROUPID:-9999}"
ports: ports:
- "${APP_PORT:-8000}:80" - "8000:8080"
environment: environment:
PUID: "${USERID:-1000}" PHP_OPCACHE_ENABLE: 1
PGID: "${GROUPID:-1000}" USER_ID: "${USERID:-9999}"
GROUP_ID: "${GROUPID:-9999}"
SSL_MODE: "off" SSL_MODE: "off"
AUTORUN_LARAVEL_STORAGE_LINK: "false" AUTORUN_LARAVEL_STORAGE_LINK: "false"
AUTORUN_LARAVEL_MIGRATION: "false" AUTORUN_LARAVEL_MIGRATION: "false"

View File

@@ -87,7 +87,7 @@ services:
soketi: soketi:
condition: service_healthy condition: service_healthy
postgres: postgres:
volumes: volumes:
- coolify-db:/var/lib/postgresql/data - coolify-db:/var/lib/postgresql/data
environment: environment:
POSTGRES_USER: "${DB_USERNAME}" POSTGRES_USER: "${DB_USERNAME}"

View File

@@ -1,6 +1,9 @@
FROM serversideup/php:8.2-fpm-nginx-v2.2.1 FROM serversideup/php:8.3-fpm-nginx
USER root
ARG TARGETPLATFORM ARG TARGETPLATFORM
ARG USER_ID
ARG GROUP_ID
# https://github.com/cloudflare/cloudflared/releases # https://github.com/cloudflare/cloudflared/releases
ARG CLOUDFLARED_VERSION=2024.4.1 ARG CLOUDFLARED_VERSION=2024.4.1
@@ -16,7 +19,7 @@ RUN apt-get update
RUN apt-get install postgresql-client-$POSTGRES_VERSION -y RUN apt-get install postgresql-client-$POSTGRES_VERSION -y
# Coolify requirements # Coolify requirements
RUN apt-get install -y php8.2-pgsql openssh-client git git-lfs jq lsof RUN apt-get install -y openssh-client git git-lfs jq lsof
RUN apt-get -y autoremove && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* RUN apt-get -y autoremove && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
COPY --chmod=755 docker/dev/etc/s6-overlay/ /etc/s6-overlay/ COPY --chmod=755 docker/dev/etc/s6-overlay/ /etc/s6-overlay/
@@ -40,7 +43,12 @@ RUN /bin/bash -c "if [[ ${TARGETPLATFORM} == 'linux/arm64' ]]; then \
COPY --from=minio/mc:RELEASE.2024-09-09T07-53-10Z /usr/bin/mc /usr/bin/mc COPY --from=minio/mc:RELEASE.2024-09-09T07-53-10Z /usr/bin/mc /usr/bin/mc
RUN chmod +x /usr/bin/mc RUN chmod +x /usr/bin/mc
RUN { \ # RUN { \
echo 'upload_max_filesize=256M'; \ # echo 'upload_max_filesize=256M'; \
echo 'post_max_size=256M'; \ # echo 'post_max_size=256M'; \
} > /etc/php/current_version/cli/conf.d/upload-limits.ini # } > /etc/php/current_version/cli/conf.d/upload-limits.ini
RUN docker-php-serversideup-set-id www-data $USER_ID:$GROUP_ID
RUN docker-php-serversideup-set-file-permissions --owner $USER_ID:$GROUP_ID --service nginx
USER www-data

View File

@@ -1,5 +1,5 @@
#!/command/execlineb -P #!/command/execlineb -P
foreground { foreground {
s6-sleep 5 s6-sleep 5
su - webuser -c "php /var/www/html/artisan start:horizon" php /var/www/html/artisan start:horizon
} }

View File

@@ -1,5 +1,5 @@
#!/command/execlineb -P #!/command/execlineb -P
foreground { foreground {
s6-sleep 5 s6-sleep 5
su - webuser -c "php /var/www/html/artisan start:scheduler" php /var/www/html/artisan start:scheduler
} }

View File

@@ -1,4 +1,5 @@
FROM serversideup/php:8.2-fpm-nginx-v2.2.1 as base FROM serversideup/php:8.3-fpm-nginx as base
USER root
WORKDIR /var/www/html WORKDIR /var/www/html
COPY composer.json composer.lock ./ COPY composer.json composer.lock ./
@@ -11,8 +12,10 @@ COPY --from=base --chown=9999:9999 /var/www/html .
RUN npm install RUN npm install
RUN npm run build RUN npm run build
FROM serversideup/php:8.2-fpm-nginx-v2.2.1 FROM serversideup/php:8.3-fpm-nginx
USER root
ARG USER_ID=9999
ARG GROUP_ID=9999
ARG TARGETPLATFORM ARG TARGETPLATFORM
# https://github.com/cloudflare/cloudflared/releases # https://github.com/cloudflare/cloudflared/releases
ARG CLOUDFLARED_VERSION=2024.4.1 ARG CLOUDFLARED_VERSION=2024.4.1
@@ -32,7 +35,7 @@ RUN apt-get update
RUN apt-get install postgresql-client-$POSTGRES_VERSION -y RUN apt-get install postgresql-client-$POSTGRES_VERSION -y
# Coolify requirements # Coolify requirements
RUN apt-get install -y php8.2-pgsql openssh-client git git-lfs jq lsof vim RUN apt-get install -y openssh-client git git-lfs jq lsof vim
RUN apt-get -y autoremove && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* RUN apt-get -y autoremove && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
COPY docker/prod/nginx.conf /etc/nginx/conf.d/custom.conf COPY docker/prod/nginx.conf /etc/nginx/conf.d/custom.conf
@@ -64,10 +67,15 @@ RUN /bin/bash -c "if [[ ${TARGETPLATFORM} == 'linux/arm64' ]]; then \
curl -L https://github.com/cloudflare/cloudflared/releases/download/${CLOUDFLARED_VERSION}/cloudflared-linux-arm64 -o /usr/local/bin/cloudflared && chmod +x /usr/local/bin/cloudflared \ curl -L https://github.com/cloudflare/cloudflared/releases/download/${CLOUDFLARED_VERSION}/cloudflared-linux-arm64 -o /usr/local/bin/cloudflared && chmod +x /usr/local/bin/cloudflared \
;fi" ;fi"
RUN { \ # RUN { \
echo 'upload_max_filesize=256M'; \ # echo 'upload_max_filesize=256M'; \
echo 'post_max_size=256M'; \ # echo 'post_max_size=256M'; \
} > /etc/php/current_version/cli/conf.d/upload-limits.ini # } > /etc/php/current_version/cli/conf.d/upload-limits.ini
COPY --from=minio/mc:RELEASE.2024-09-09T07-53-10Z /usr/bin/mc /usr/bin/mc COPY --from=minio/mc:RELEASE.2024-09-09T07-53-10Z /usr/bin/mc /usr/bin/mc
RUN chmod +x /usr/bin/mc RUN chmod +x /usr/bin/mc
RUN docker-php-serversideup-set-id www-data $USER_ID:$GROUP_ID
RUN docker-php-serversideup-set-file-permissions --owner $USER_ID:$GROUP_ID --service nginx
USER www-data

View File

@@ -1,5 +1,5 @@
#!/command/execlineb -P #!/command/execlineb -P
foreground { foreground {
s6-sleep 5 s6-sleep 5
su - webuser -c "php /var/www/html/artisan start:horizon" php /var/www/html/artisan start:horizon
} }

View File

@@ -1,3 +1,2 @@
#!/command/execlineb -P #!/command/execlineb -P
s6-setuidgid webuser
php /var/www/html/artisan app:init --full-cleanup php /var/www/html/artisan app:init --full-cleanup

View File

@@ -1,5 +1,5 @@
#!/command/execlineb -P #!/command/execlineb -P
foreground { foreground {
s6-sleep 5 s6-sleep 5
su - webuser -c "php /var/www/html/artisan start:scheduler" php /var/www/html/artisan start:scheduler
} }

View File

@@ -62,10 +62,10 @@ function sync:bunny {
# } # }
function db:reset { function db:reset {
bash spin exec -u webuser coolify php artisan migrate:fresh --seed bash spin exec coolify php artisan migrate:fresh --seed
} }
function db:reset-prod { function db:reset-prod {
bash spin exec -u webuser coolify php artisan migrate:fresh --force --seed --seeder=ProductionSeeder || bash spin exec coolify php artisan migrate:fresh --force --seed --seeder=ProductionSeeder ||
php artisan migrate:fresh --force --seed --seeder=ProductionSeeder php artisan migrate:fresh --force --seed --seeder=ProductionSeeder
} }
@@ -74,11 +74,11 @@ function mfs {
} }
function coolify { function coolify {
bash spin exec -u webuser coolify bash bash spin exec coolify bash
} }
function coolify:root { function coolify:root {
bash spin exec coolify bash bash spin exec -u root coolify bash
} }
function coolify:proxy { function coolify:proxy {
docker exec -ti coolify-proxy sh docker exec -ti coolify-proxy sh
@@ -93,7 +93,7 @@ function vite {
} }
function tinker { function tinker {
bash spin exec -u webuser coolify php artisan tinker bash spin exec coolify php artisan tinker
} }
# function build:helper { # function build:helper {

View File

@@ -1,10 +1,10 @@
{ {
"coolify": { "coolify": {
"v4": { "v4": {
"version": "4.0.0-beta.335" "version": "4.0.0-beta.336"
}, },
"nightly": { "nightly": {
"version": "4.0.0-beta.336" "version": "4.0.0-beta.337"
}, },
"helper": { "helper": {
"version": "1.0.1" "version": "1.0.1"