WuYongJie 2b6c4030e5
Some checks failed
Tests / PHP 8.1 (push) Has been cancelled
Tests / PHP 8.2 (push) Has been cancelled
Tests / PHP 8.3 (push) Has been cancelled
chore: 补充财务与支付模块源码
2026-07-20 18:40:05 +08:00

293 lines
9.5 KiB
YAML

name: Releases
on:
release:
types: [released]
jobs:
check-json-version:
runs-on: ubuntu-20.04
steps:
- name: Checkout module
uses: actions/checkout@v3
- id: set_var
run: |
content=`cat ./module.json`
# the following lines are only required for multi line json
content="${content//'%'/'%25'}"
content="${content//$'\n'/'%0A'}"
content="${content//$'\r'/'%0D'}"
# end of optional handling for multi line json
echo "::set-output name=moduleJson::$content"
- name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Check version equality
run: |
if [ "${{fromJson(steps.set_var.outputs.moduleJson).version}}" == $RELEASE_VERSION ]; then
exit 0
else
exit 1
fi
tests:
needs: [check-json-version]
name: PHP ${{ matrix.php }}
runs-on: ubuntu-20.04
strategy:
matrix:
php: ['8.1', '8.2']
steps:
- name: Checkout Akaunting
uses: actions/checkout@v3
with:
repository: akaunting/akaunting
- name: Checkout module to tmp path
uses: actions/checkout@v3
with:
path: tmp-path-for-module
- id: set_var
run: |
content=`cat ./tmp-path-for-module/module.json`
# the following lines are only required for multi line json
content="${content//'%'/'%25'}"
content="${content//$'\n'/'%0A'}"
content="${content//$'\r'/'%0D'}"
# end of optional handling for multi line json
echo "::set-output name=moduleJson::$content"
- name: Create module folder name which is PascalCase
run: |
MODULE_FOLDER_NAME=$(echo -n ${{fromJson(steps.set_var.outputs.moduleJson).alias}} | sed -r 's/(^|-)([a-z])/\U\2/g')
echo "MODULE_FOLDER_NAME=${MODULE_FOLDER_NAME}" >> $GITHUB_ENV
- name: Remove the tmp folder
run: rm -rf tmp-path-for-module
- name: Checkout module
uses: actions/checkout@v3
with:
path: modules/${{ env.MODULE_FOLDER_NAME }}
- name: Cache Composer
uses: actions/cache@v1
with:
path: ~/.composer/cache/files
key: php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: bcmath, ctype, dom, fileinfo, intl, gd, json, mbstring, pdo, pdo_sqlite, openssl, sqlite, xml, zip
coverage: none
- name: Copy .env
run: cp .env.testing .env
- name: Install Composer
run: cd "modules/${{ env.MODULE_FOLDER_NAME }}" ; composer test ; cd ../.. ; composer test
- name: Execute tests
run: php artisan test --parallel
build:
needs: [tests]
runs-on: ubuntu-20.04
steps:
- name: Checkout Akaunting
uses: actions/checkout@v3
with:
repository: akaunting/akaunting
- name: Checkout module to tmp path
uses: actions/checkout@v3
with:
path: tmp-path-for-module
- id: set_var
run: |
content=`cat ./tmp-path-for-module/module.json`
# the following lines are only required for multi line json
content="${content//'%'/'%25'}"
content="${content//$'\n'/'%0A'}"
content="${content//$'\r'/'%0D'}"
# end of optional handling for multi line json
echo "::set-output name=moduleJson::$content"
- name: Remove the tmp folder
run: rm -rf tmp-path-for-module
- name: Create module folder name which is PascalCase
run: |
MODULE_FOLDER_NAME=$(echo -n ${{fromJson(steps.set_var.outputs.moduleJson).alias}} | sed -r 's/(^|-)([a-z])/\U\2/g')
echo "MODULE_FOLDER_NAME=${MODULE_FOLDER_NAME}" >> $GITHUB_ENV
- name: Checkout module
uses: actions/checkout@v3
with:
path: modules/${{ env.MODULE_FOLDER_NAME }}
- name: Cache Composer
uses: actions/cache@v1
with:
path: ~/.composer/cache/files
key: php-8.1-composer-${{ hashFiles('composer.json') }}
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.1'
extensions: bcmath, ctype, dom, fileinfo, intl, gd, json, mbstring, pdo, pdo_sqlite, openssl, sqlite, xml, zip
coverage: none
- name: Copy .env
run: cp .env.testing .env
- name: Install Composer
run: cd "modules/${{ env.MODULE_FOLDER_NAME }}" ; composer install --no-dev ; cd ../.. ; composer install --no-dev
- name: Run npm install for Akaunting
run: npm install
- name: Run npm install for the module
run: |
cd "modules/${{ env.MODULE_FOLDER_NAME }}"
npm install
- name: Compile module assets
run: |
cd "modules/${{ env.MODULE_FOLDER_NAME }}"
npm run production
- name: Install zip
run: sudo apt install zip
- name: Delete sass folder
run: |
cd "modules/${{ env.MODULE_FOLDER_NAME }}/Resources/assets"
rm -rf sass
- name: Delete mix-manifest.json file
run: |
cd "modules/${{ env.MODULE_FOLDER_NAME }}"
rm -f mix-manifest.json
- name: Delete non .min.js files
run: |
cd "modules/${{ env.MODULE_FOLDER_NAME }}/Resources/assets/js"
find . -type f ! -name '*.min.js' -delete
- name: ZIP
run: cd "modules/${{ env.MODULE_FOLDER_NAME }}" ; zip -r ../../final-build.zip . * -x '*.git*' -x '*node_modules*' -x 'composer.json' -x 'composer.lock' -x 'crowdin.yml' -x 'package-lock.json' -x 'package.json' -x 'README.md' -x 'webpack.mix.js' ; cd ..
- uses: actions/upload-artifact@master
with:
name: final-build
path: ${{ github.workspace }}/final-build.zip
upload-to-site:
needs: [build]
runs-on: ubuntu-20.04
steps:
- uses: actions/download-artifact@master
with:
name: final-build
- name: Install unzip
run: sudo apt install unzip
- name: UNZIP
run: unzip final-build.zip -d src
- id: set_var
run: |
content=`cat ./src/module.json`
# the following lines are only required for multi line json
content="${content//'%'/'%25'}"
content="${content//$'\n'/'%0A'}"
content="${content//$'\r'/'%0D'}"
# end of optional handling for multi line json
echo "::set-output name=moduleJson::$content"
- name: Rename zip archive
run: mv final-build.zip ${{fromJson(steps.set_var.outputs.moduleJson).alias}}-v${{fromJson(steps.set_var.outputs.moduleJson).version}}.zip
- name: Upload to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{fromJson(steps.set_var.outputs.moduleJson).alias}}-v${{fromJson(steps.set_var.outputs.moduleJson).version}}.zip
tag: ${{ github.ref }}
overwrite: true
- name: Upload to Akaunting Site
run: |
curl \
-H "Authorization: Bearer ${{ secrets.AKAUNTING_SITE_AUTH_BEARER }}" \
-H "Module-Version: ${{fromJson(steps.set_var.outputs.moduleJson).version}}" \
-F "file=@./${{fromJson(steps.set_var.outputs.moduleJson).alias}}-v${{fromJson(steps.set_var.outputs.moduleJson).version}}.zip" \
--retry 5 \
--retry-delay 60 \
${{ secrets.AKAUNTING_SITE_API_DOMAIN }}/${{ secrets.AKAUNTING_SITE_API_MODULES_ENDPOINT }}/${{fromJson(steps.set_var.outputs.moduleJson).alias}}
update-cloud:
needs: [upload-to-site]
runs-on: ubuntu-20.04
steps:
- uses: actions/download-artifact@master
with:
name: final-build
- name: Install unzip
run: sudo apt install unzip
- name: UNZIP
run: unzip final-build.zip -d src
- id: set_var
run: |
content=`cat ./src/module.json`
# the following lines are only required for multi line json
content="${content//'%'/'%25'}"
content="${content//$'\n'/'%0A'}"
content="${content//$'\r'/'%0D'}"
# end of optional handling for multi line json
echo "::set-output name=moduleJson::$content"
- name: Update the Cloud
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.AKAUNTING_CLOUD_HOST }}
username: ${{ secrets.AKAUNTING_CLOUD_USERNAME }}
key: ${{ secrets.AKAUNTING_CLOUD_SSH_PRIVATE }}
script: |
cd /${{ secrets.AKAUNTING_CLOUD_PATH }}
${{ secrets.AKAUNTING_CLOUD_UPDATE_COMMAND }} ${{fromJson(steps.set_var.outputs.moduleJson).alias}} 1 ${{fromJson(steps.set_var.outputs.moduleJson).version}}