diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 784e73ef..c80ce9a4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,9 +32,9 @@ jobs: steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} @@ -87,10 +87,10 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node.js for use with actions - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18 - @@ -99,7 +99,7 @@ jobs: - name: Create Release run: npm run create-release -- --skip-opt-packages=ffmpeg-static,ffprobe-static --force-opt-packages - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: pigallery2-release path: release @@ -119,29 +119,29 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 - - uses: actions/download-artifact@v3 + uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 with: name: pigallery2-release path: pigallery2-release - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to DockerHub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Build docker - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: context: . file: docker/${{ matrix.container }}/Dockerfile.build platforms: ${{ matrix.platforms }} - name: Push experimental if: ${{ github.ref == 'refs/heads/experimental' }} - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: context: . file: docker/${{ matrix.container }}/Dockerfile.build @@ -151,7 +151,7 @@ jobs: - name: Push edge on new master commit # github.ref: branches the format is refs/heads/ PRs and Tags are different if: ${{github.ref == 'refs/heads/master' }} - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: context: . file: docker/${{ matrix.container }}/Dockerfile.build @@ -160,7 +160,7 @@ jobs: tags: bpatrik/pigallery2:edge-${{ matrix.container }} - name: Push release on new Tag if: ${{ startsWith(github.ref_type , 'tag') && !github.event.issue.pull_request && matrix.container != 'debian-bullseye'}} - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: context: . file: docker/${{ matrix.container }}/Dockerfile.build @@ -172,7 +172,7 @@ jobs: bpatrik/pigallery2:latest-${{ matrix.container }} - name: Push latest on new Tag if: ${{ startsWith(github.ref_type, 'tag') && !github.event.issue.pull_request && matrix.container == 'debian-bullseye'}} - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: context: . file: docker/${{ matrix.container }}/Dockerfile.build diff --git a/src/backend/model/extension/ExtensionConfigWrapper.ts b/src/backend/model/extension/ExtensionConfigWrapper.ts index d96e4bc7..ec24c3a9 100644 --- a/src/backend/model/extension/ExtensionConfigWrapper.ts +++ b/src/backend/model/extension/ExtensionConfigWrapper.ts @@ -22,9 +22,8 @@ export class ExtensionConfigWrapper { // make sure the config file exists by the time we load it. // TODO: remove this once typeconfig is fixed and can properly load defaults in arrays if (!fs.existsSync((pc.__options as ConfigClassOptions).configPath)) { - await pc.save(); + await pc.load(); } - await pc.load(); // loading the basic configs, but we do not know the extension config hierarchy yet // TODO make sure that all extensions are present even after loading them from file @@ -47,7 +46,7 @@ export class ExtensionConfigWrapper { // make sure the config file exists by the time we load it. // TODO: remove this once typeconfig is fixed and can properly load defaults in arrays if (!fs.existsSync((pc.__options as ConfigClassOptions).configPath)) { - pc.saveSync(); + pc.loadSync(); } pc.loadSync(); // loading the basic configs, but we do not know the extension config hierarchy yet // TODO make sure that all extensions are present even after loading them from file diff --git a/src/common/config/private/PrivateConfigClass.ts b/src/common/config/private/PrivateConfigClass.ts index f9d34834..d7386684 100644 --- a/src/common/config/private/PrivateConfigClass.ts +++ b/src/common/config/private/PrivateConfigClass.ts @@ -15,7 +15,7 @@ const isTesting = process.env['NODE_ENV'] == true || ['afterEach', 'after', 'bef .every((fn) => (global as any)[fn] instanceof Function); @ConfigClass & ServerConfig>({ - configPath: path.join(__dirname, !isTesting ? './../../../../config.json' : './../../../../test/backend/tmp/config.json'), + configPath: path.join(__dirname, !isTesting ? './../../../../config.json' : './../../../../test/tmp/config.json'), crateConfigPathIfNotExists: isTesting, saveIfNotExist: true, attachDescription: true, diff --git a/test/common/unit/config/Config.ts b/test/common/unit/config/Config.ts new file mode 100644 index 00000000..f288d02f --- /dev/null +++ b/test/common/unit/config/Config.ts @@ -0,0 +1,25 @@ +import {expect} from 'chai'; +import {ConfigClassBuilder} from 'typeconfig/node'; +import {ExtensionConfigWrapper} from '../../../../src/backend/model/extension/ExtensionConfigWrapper'; +import {TestHelper} from '../../../TestHelper'; +import * as fs from 'fs'; + + +describe('Config', () => { + beforeEach(async () => { + await fs.promises.rm(TestHelper.TMP_DIR, {recursive: true, force: true}); + }); + afterEach(async () => { + await fs.promises.rm(TestHelper.TMP_DIR, {recursive: true, force: true}); + }); + it('should load default from env', () => { + process.env['default-Media-tempFolder'] = 'test/test'; + const conf = ExtensionConfigWrapper.originalSync(); + expect(conf.Media.tempFolder).to.be.equal('test/test'); + expect(ConfigClassBuilder.attachPrivateInterface(conf.Media).__defaults.tempFolder).to.be.equal('test/test'); + expect(process.env['default-Media-tempFolder']).to.be.equal('test/test'); + const conf2 = ExtensionConfigWrapper.originalSync(); + expect(ConfigClassBuilder.attachPrivateInterface(conf2.Media).__defaults.tempFolder).to.be.equal('test/test'); + expect(conf2.Media.tempFolder).to.be.equal('test/test'); + }); +});