diff --git a/extensions/package-manager/.gitattributes b/extensions/package-manager/.gitattributes index 67d307d04..b9a08e27d 100644 --- a/extensions/package-manager/.gitattributes +++ b/extensions/package-manager/.gitattributes @@ -1,5 +1,19 @@ -js/src export-ignore -.git* export-ignore +.gitattributes export-ignore +.gitignore export-ignore +.gitmodules export-ignore +.github export-ignore +.travis export-ignore +.travis.yml export-ignore +.editorconfig export-ignore +.styleci.yml export-ignore -js/dist/*.js -diff -tests/* +phpunit.xml export-ignore +tests export-ignore + +js/dist/* -diff +js/dist/* linguist-generated +js/dist-typings/* linguist-generated +js/yarn.lock -diff +js/package-lock.json -diff + +* text=auto eol=lf diff --git a/extensions/package-manager/.github/workflows/backend.yml b/extensions/package-manager/.github/workflows/backend.yml new file mode 100644 index 000000000..eaf8723ad --- /dev/null +++ b/extensions/package-manager/.github/workflows/backend.yml @@ -0,0 +1,15 @@ +name: Package Manager PHP + +on: [workflow_dispatch, push, pull_request] + +# The reusable workflow definitions will be moved to the `flarum/framework` repo soon. +# This will break your current script. +# When this happens, run `flarum-cli audit infra --fix` to update your infrastructure. + +jobs: + run: + uses: flarum/.github/.github/workflows/REUSABLE_backend.yml@main + with: + enable_backend_testing: true + + backend_directory: . \ No newline at end of file diff --git a/extensions/package-manager/.github/workflows/frontend.yml b/extensions/package-manager/.github/workflows/frontend.yml new file mode 100755 index 000000000..6683d6271 --- /dev/null +++ b/extensions/package-manager/.github/workflows/frontend.yml @@ -0,0 +1,23 @@ +name: Package Manager JS + +on: [workflow_dispatch, push, pull_request] + +# The reusable workflow definitions will be moved to the `flarum/framework` repo soon. +# This will break your current script. +# When this happens, run `flarum-cli audit infra --fix` to update your infrastructure. + +jobs: + run: + uses: flarum/.github/.github/workflows/REUSABLE_frontend.yml@as/support-npm-yarn + with: + enable_bundlewatch: false + enable_prettier: true + enable_typescript: true + + frontend_directory: ./js + backend_directory: . + package_manager: yarn + main_git_branch: main + + secrets: + bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }} diff --git a/extensions/package-manager/.github/workflows/js.yml b/extensions/package-manager/.github/workflows/js.yml deleted file mode 100755 index 84e1aa42c..000000000 --- a/extensions/package-manager/.github/workflows/js.yml +++ /dev/null @@ -1,91 +0,0 @@ -name: JS - -on: [workflow_dispatch, push, pull_request] - -env: - NODE_VERSION: 16 - -jobs: - prettier: - name: Prettier - runs-on: ubuntu-latest - - steps: - - name: Check out code - uses: actions/checkout@v2 - - - name: Set up Node - uses: actions/setup-node@v2 - with: - node-version: ${{ env.NODE_VERSION }} - cache: "yarn" - cache-dependency-path: js/yarn.lock - - - name: Install JS dependencies - run: yarn install --frozen-lockfile - working-directory: ./js - - - name: Check JS formatting - run: yarn run format-check - working-directory: ./js - - build-prod: - name: Build and commit - runs-on: ubuntu-latest - needs: [prettier] - - # Only commit JS on push to master branch - # Remember to change in `build-test` job too - if: github.ref == 'refs/heads/<%= mainGitBranch %>' && github.event_name == 'push' - - steps: - - name: Check out code - uses: actions/checkout@v2 - - - name: Set up Node - uses: actions/setup-node@v2 - with: - node-version: ${{ env.NODE_VERSION }} - cache: "yarn" - cache-dependency-path: js/yarn.lock - - # Our action will install npm, cd into `./js`, run `npm run build` and - # `npm run build-typings`, then commit and upload any changes - - name: Build production JS - uses: flarum/action-build@2 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - build_script: build - package_manager: yarn - # typings_script: build-typings - - build-test: - name: Test build - runs-on: ubuntu-latest - needs: [prettier] - - # Inverse check of `build-prod` - # Remember to change in `build-prod` job too - if: github.ref != 'refs/heads/<%= mainGitBranch %>' || github.event_name != 'push' - - steps: - - name: Check out code - uses: actions/checkout@v2 - - - name: Set up Node - uses: actions/setup-node@v2 - with: - node-version: ${{ env.NODE_VERSION }} - cache: "yarn" - cache-dependency-path: js/yarn.lock - - # Our action will install npm, cd into `./js`, run `npm run build` and - # `npm run build-typings`, then commit and upload any changes - - name: Build production JS - uses: flarum/action-build@2 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - build_script: build - package_manager: yarn - # typings_script: build-typings - do_not_commit: true diff --git a/extensions/package-manager/.github/workflows/test.yml b/extensions/package-manager/.github/workflows/test.yml deleted file mode 100755 index ac322a07c..000000000 --- a/extensions/package-manager/.github/workflows/test.yml +++ /dev/null @@ -1,85 +0,0 @@ -name: Tests - -on: [push, pull_request] - -jobs: - test: - runs-on: ubuntu-latest - - strategy: - matrix: - php: [7.3, 7.4, '8.0', 8.1] - service: ['mysql:5.7', mariadb] - prefix: ['', flarum_] - - include: - - service: 'mysql:5.7' - db: MySQL - - service: mariadb - db: MariaDB - - prefix: flarum_ - prefixStr: (prefix) - - exclude: - - php: 7.3 - service: 'mysql:5.7' - prefix: flarum_ - - php: 7.3 - service: mariadb - prefix: flarum_ - - php: 8.0 - service: 'mysql:5.7' - prefix: flarum_ - - php: 8.0 - service: mariadb - prefix: flarum_ - - php: 8.1 - service: 'mysql:5.7' - prefix: flarum_ - - php: 8.1 - service: mariadb - prefix: flarum_ - - services: - mysql: - image: ${{ matrix.service }} - ports: - - 13306:3306 - - name: 'PHP ${{ matrix.php }} / ${{ matrix.db }} ${{ matrix.prefixStr }}' - - steps: - - uses: actions/checkout@master - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php }} - coverage: xdebug - extensions: curl, dom, gd, json, mbstring, openssl, pdo_mysql, tokenizer, zip - tools: phpunit, composer:v2 - - # The authentication alter is necessary because newer mysql versions use the `caching_sha2_password` driver, - # which isn't supported prior to PHP7.4 - # When we drop support for PHP7.3, we should remove this from the setup. - - name: Create MySQL Database - run: | - sudo systemctl start mysql - mysql -uroot -proot -e 'CREATE DATABASE flarum_test;' --port 13306 - mysql -uroot -proot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';" --port 13306 - - - name: Install Composer dependencies - run: composer install - - - name: Setup Composer tests - run: composer test:setup - env: - DB_PORT: 13306 - DB_PASSWORD: root - DB_PREFIX: ${{ matrix.prefix }} - FLARUM_TEST_TMP_DIR_LOCAL: tests/tmp - - - name: Run Composer tests - run: composer test - env: - COMPOSER_PROCESS_TIMEOUT: 600 diff --git a/extensions/package-manager/.gitignore b/extensions/package-manager/.gitignore index cb0813cde..4ebb168a0 100755 --- a/extensions/package-manager/.gitignore +++ b/extensions/package-manager/.gitignore @@ -1,5 +1,12 @@ -js/node_modules -vendor/ +/vendor composer.lock -tests/tmp/ -.phpunit.result.cache +composer.phar + +.DS_Store +Thumbs.db +tests/.phpunit.result.cache +/tests/integration/tmp +.vagrant +.idea/* +.vscode +js/coverage-ts diff --git a/extensions/package-manager/.styleci.yml b/extensions/package-manager/.styleci.yml new file mode 100644 index 000000000..8806a5402 --- /dev/null +++ b/extensions/package-manager/.styleci.yml @@ -0,0 +1,14 @@ +preset: recommended + +enabled: + - logical_not_operators_with_successor_space + +disabled: + - align_double_arrow + - blank_line_after_opening_tag + - multiline_array_trailing_comma + - new_with_braces + - phpdoc_align + - phpdoc_order + - phpdoc_separation + - phpdoc_types diff --git a/extensions/package-manager/composer.json b/extensions/package-manager/composer.json index d276c8288..7824630ed 100755 --- a/extensions/package-manager/composer.json +++ b/extensions/package-manager/composer.json @@ -2,7 +2,11 @@ "name": "flarum/package-manager", "description": "A Flarum Package Manager.", "keywords": [ - "extensions", "composer", "packages", "manager", "updater" + "extensions", + "composer", + "packages", + "manager", + "updater" ], "type": "flarum-extension", "license": "MIT", @@ -22,7 +26,6 @@ "composer/composer": "^2.0" }, "require-dev": { - "flarum/core": "dev-master", "flarum/testing": "^1.0.0", "flarum/tags": "*" }, @@ -34,6 +37,23 @@ "backgroundColor": "#117187", "color": "#fff" } + }, + "flarum-cli": { + "modules": { + "admin": true, + "forum": false, + "js": true, + "jsCommon": false, + "css": true, + "gitConf": true, + "githubActions": true, + "prettier": true, + "typescript": true, + "bundlewatch": false, + "backendTesting": true, + "editorConfig": true, + "styleci": true + } } }, "autoload": { @@ -63,5 +83,7 @@ "test:unit": "Runs all unit tests.", "test:integration": "Runs all integration tests.", "test:setup": "Sets up a database for use with integration tests. Execute this only once." - } + }, + "minimum-stability": "dev", + "prefer-stable": true } diff --git a/extensions/package-manager/js/.gitignore b/extensions/package-manager/js/.gitignore new file mode 100644 index 000000000..adc90f312 --- /dev/null +++ b/extensions/package-manager/js/.gitignore @@ -0,0 +1,9 @@ +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +node_modules diff --git a/extensions/package-manager/js/admin.js b/extensions/package-manager/js/admin.js deleted file mode 100755 index 13dc041ce..000000000 --- a/extensions/package-manager/js/admin.js +++ /dev/null @@ -1 +0,0 @@ -export * from './src/admin'; \ No newline at end of file diff --git a/extensions/package-manager/js/admin.ts b/extensions/package-manager/js/admin.ts new file mode 100644 index 000000000..3e69ff3b9 --- /dev/null +++ b/extensions/package-manager/js/admin.ts @@ -0,0 +1 @@ +export * from './src/admin'; diff --git a/extensions/package-manager/js/package.json b/extensions/package-manager/js/package.json index 8755d76b6..01ad726df 100755 --- a/extensions/package-manager/js/package.json +++ b/extensions/package-manager/js/package.json @@ -3,20 +3,26 @@ "version": "0.0.0", "private": true, "prettier": "@flarum/prettier-config", - "dependencies": { - "@flarum/prettier-config": "^1.0.0", - "flarum-tsconfig": "^1.0.0", - "flarum-webpack-config": "^1.0.0", - "webpack": "^4.26.0", - "webpack-cli": "^3.0.7" - }, "devDependencies": { - "prettier": "^2.3.0" + "prettier": "^2.5.1", + "flarum-webpack-config": "^2.0.0", + "webpack": "^5.65.0", + "webpack-cli": "^4.9.1", + "@flarum/prettier-config": "^1.0.0", + "flarum-tsconfig": "^1.0.2", + "typescript": "^4.5.4", + "typescript-coverage-report": "^0.6.1" }, "scripts": { "dev": "webpack --mode development --watch", "build": "webpack --mode production", "format": "prettier --write src", - "format-check": "prettier --check src" + "format-check": "prettier --check src", + "ci": "yarn install --immutable --immutable-cache", + "analyze": "cross-env ANALYZER=true yarn run build", + "clean-typings": "npx rimraf dist-typings && mkdir dist-typings", + "build-typings": "yarn run clean-typings && tsc && [ -e src/@types ] && cp -r src/@types dist-typings/@types", + "check-typings": "tsc --noEmit --emitDeclarationOnly false", + "check-typings-coverage": "typescript-coverage-report" } } diff --git a/extensions/package-manager/js/tsconfig.json b/extensions/package-manager/js/tsconfig.json index a60a30754..ee0d5ef5a 100755 --- a/extensions/package-manager/js/tsconfig.json +++ b/extensions/package-manager/js/tsconfig.json @@ -1,16 +1,16 @@ { - // Use Flarum's tsconfig as a starting point - "extends": "flarum-tsconfig", - // This will match all .ts, .tsx, .d.ts, .js, .jsx files in your `src` folder - // and also tells your Typescript server to read core's global typings for - // access to `dayjs` and `$` in the global namespace. - "include": ["src/**/*", "../vendor/flarum/core/js/dist-typings/@types/**/*"], - "compilerOptions": { - // This will output typings to `dist-typings` - "declarationDir": "./dist-typings", - "baseUrl": ".", - "paths": { - "flarum/*": ["../vendor/flarum/core/js/dist-typings/*"] - } + // Use Flarum's tsconfig as a starting point + "extends": "flarum-tsconfig", + // This will match all .ts, .tsx, .d.ts, .js, .jsx files in your `src` folder + // and also tells your Typescript server to read core's global typings for + // access to `dayjs` and `$` in the global namespace. + "include": ["src/**/*", "../vendor/flarum/core/js/dist-typings/@types/**/*", "@types/**/*"], + "compilerOptions": { + // This will output typings to `dist-typings` + "declarationDir": "./dist-typings", + "baseUrl": ".", + "paths": { + "flarum/*": ["../vendor/flarum/core/js/dist-typings/*"] } + } } diff --git a/extensions/package-manager/tests/integration/SetupComposer.php b/extensions/package-manager/tests/integration/SetupComposer.php index 5112e9912..9a1080ce4 100644 --- a/extensions/package-manager/tests/integration/SetupComposer.php +++ b/extensions/package-manager/tests/integration/SetupComposer.php @@ -28,7 +28,7 @@ class SetupComposer 'repositories' => [ [ 'type' => 'path', - 'url' => __DIR__.'/../tmp/packages/*', + 'url' => __DIR__.'/tmp/packages/*', ] ] ]; diff --git a/extensions/package-manager/tests/phpunit.integration.xml b/extensions/package-manager/tests/phpunit.integration.xml index 4602db3fd..2d2b64c39 100644 --- a/extensions/package-manager/tests/phpunit.integration.xml +++ b/extensions/package-manager/tests/phpunit.integration.xml @@ -19,9 +19,10 @@ ./integration + ./integration/tmp - +