diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml index 325e6b4b4..72bbe803c 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress.yml @@ -4,7 +4,7 @@ on: pull_request: push: branches: - - master + - main - stable* env: @@ -14,7 +14,7 @@ env: jobs: cypress: - runs-on: ubuntu-latest + runs-on: self-hosted strategy: fail-fast: false @@ -33,6 +33,11 @@ jobs: - name: Set up npm7 run: npm i -g npm@7 + - name: Register text Git reference + run: | + text_app_ref="$(if [ "${{ matrix.server-versions }}" = "master" ]; then echo -n "main"; else echo -n "${{ matrix.server-versions }}"; fi)" + echo "text_app_ref=$text_app_ref" >> $GITHUB_ENV + - name: Checkout server uses: actions/checkout@v3 with: @@ -51,11 +56,18 @@ jobs: with: path: apps/${{ env.APP_NAME }} + - name: Checkout text + uses: actions/checkout@v3 + with: + repository: nextcloud/text + ref: ${{ env.text_app_ref }} + path: apps/text + - name: Set up php ${{ matrix.php-versions }} - uses: shivammathur/setup-php@2.21.2 + uses: shivammathur/setup-php@2.25.4 with: php-version: ${{ matrix.php-versions }} - extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, zip, gd, apcu + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite, apcu ini-values: apc.enable_cli=on coverage: none @@ -84,7 +96,7 @@ jobs: curl -v http://localhost:8081/index.php/login - name: Cypress run - uses: cypress-io/github-action@v4 + uses: cypress-io/github-action@v5 with: record: true parallel: false @@ -96,7 +108,7 @@ jobs: npm_package_name: ${{ env.APP_NAME }} - name: Upload test failure screenshots - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 if: failure() with: name: Upload screenshots @@ -104,7 +116,7 @@ jobs: retention-days: 5 - name: Upload nextcloud logs - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 if: failure() with: name: Upload nextcloud log diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index d7e0e12b4..8c1ed26f5 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -12,6 +12,7 @@ on: - 'composer.lock' push: branches: + - main - master - stable* @@ -70,16 +71,17 @@ jobs: path: apps/${{ env.APP_NAME }} - name: Set up php ${{ matrix.php-versions }} - uses: shivammathur/setup-php@2.21.2 + uses: shivammathur/setup-php@2.25.4 with: php-version: ${{ matrix.php-versions }} - tools: phpunit - extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, mysql, pdo_mysql, pgsql, pdo_pgsql, + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite, mysql, pdo_mysql, pgsql, pdo_pgsql, apcu + ini-values: + apc.enable_cli=on coverage: none - - name: Set up PHPUnit + - name: Set up dependencies working-directory: apps/${{ env.APP_NAME }} - run: composer i + run: composer i --no-dev - name: Set up Nextcloud run: | @@ -90,11 +92,63 @@ jobs: fi mkdir data ./occ maintenance:install --verbose --database=${{ matrix.databases }} --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + ./occ config:system:set hashing_default_password --value=true --type=boolean + ./occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu" + ./occ config:system:set memcache.distributed --value="\\OC\\Memcache\\APCu" cat config/config.php ./occ user:list ./occ app:enable --force ${{ env.APP_NAME }} + ./occ config:system:set query_log_file --value "$PWD/query.log" php -S localhost:8080 & - name: Run behat working-directory: apps/${{ env.APP_NAME }}/tests/integration run: ./run.sh + + - name: Query count + if: ${{ matrix.databases == 'mysql' }} + uses: actions/github-script@v6 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + let myOutput = '' + let myError = '' + + const options = {} + options.listeners = { + stdout: (data) => { + myOutput += data.toString() + }, + stderr: (data) => { + myError += data.toString() + } + } + await exec.exec(`/bin/bash -c "cat query.log | wc -l"`, [], options) + msg = myOutput + const queryCount = parseInt(myOutput, 10) + + myOutput = '' + await exec.exec('cat', ['apps/${{ env.APP_NAME }}/tests/integration/base-query-count.txt'], options) + const baseCount = parseInt(myOutput, 10) + + const absoluteIncrease = queryCount - baseCount + const relativeIncrease = baseCount <= 0 ? 100 : (parseInt((absoluteIncrease / baseCount * 10000), 10) / 100) + + if (absoluteIncrease >= 100 || relativeIncrease > 5) { + const comment = `🐢 Performance warning.\nIt looks like the query count of the integration tests increased with this PR.\nDatabase query count is now ` + queryCount + ' was ' + baseCount + ' (+' + relativeIncrease + '%)\nPlease check your code again. If you added a new test this can be expected and the base value in tests/integration/base-query-count.txt can be increased.' + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: comment + }) + } + if (queryCount < 100) { + const comment = `🐈 Performance messuring seems broken. Failed to get query count.` + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: comment + }) + } \ No newline at end of file diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml deleted file mode 100644 index 3643bd8c9..000000000 --- a/.github/workflows/nightly.yml +++ /dev/null @@ -1,64 +0,0 @@ -name: Package nightly - -on: - push: - branches: - - nightly - schedule: - - cron: '0 1 * * *' # run at 2 AM UTC - -jobs: - build: - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [14.x] - - steps: - - uses: actions/checkout@v3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - name: Set up npm7 - run: npm i -g npm@7 - - name: Setup PHP - uses: shivammathur/setup-php@2.21.2 - with: - php-version: '7.4' - tools: composer - - name: install dependencies - run: | - wget https://github.com/ChristophWurst/krankerl/releases/download/v0.12.2/krankerl_0.12.2_amd64.deb - sudo dpkg -i krankerl_0.12.2_amd64.deb - - name: package - run: | - uname -a - RUST_BACKTRACE=1 krankerl --version - RUST_BACKTRACE=1 krankerl package - - name: Set git config - run: | - git config --local user.email "action@github.com" - git config --local user.name "GitHub Action" - git tag -f nightly - - name: Push tag - uses: juliushaertl/github-push-action@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - tags: true - force: true - - name: Create Release - id: create_release - uses: juliushaertl/action-release@master - with: - token: ${{ secrets.GITHUB_TOKEN }} - tag: nightly - files: ./build/artifacts/deck.tar.gz - name: Nightly build - body: | - Nightly release of deck - draft: false - prerelease: true - overwrite: true diff --git a/package-lock.json b/package-lock.json index ae0a5779a..f18e0a74e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3611,17 +3611,17 @@ } }, "node_modules/@nextcloud/stylelint-config": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@nextcloud/stylelint-config/-/stylelint-config-2.3.1.tgz", - "integrity": "sha512-Bhz0xIC2SWS2ihzRFCkKuEc7M1WeHeImu7JvmBZfdxlcM7FuFwV8L8JIIsnzKED1xd6ZtmAlPYWstE8hMKwOxQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/stylelint-config/-/stylelint-config-2.3.0.tgz", + "integrity": "sha512-5mtWqqwrXFXekGT0I8PtVYxJAUQXYwMF28e2MBFbsbyCv+XVzFn9rOYAn6xUG1PrsIeEnom0xlQdrrjpJc71oA==", "dev": true, "engines": { - "node": "^20.0.0", - "npm": "^9.0.0" + "node": "^16.0.0", + "npm": "^7.0.0 || ^8.0.0" }, "peerDependencies": { - "stylelint": "^15.6.0", - "stylelint-config-recommended-scss": "^12.0.0", + "stylelint": "^14.2.0", + "stylelint-config-recommended-scss": "^7.0.0", "stylelint-config-recommended-vue": "^1.1.0" } }, @@ -16770,29 +16770,6 @@ "license": "MIT", "peer": true }, - "node_modules/postcss-scss": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz", - "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-scss" - } - ], - "peer": true, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.4.19" - } - }, "node_modules/postcss-selector-parser": { "version": "6.0.13", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", @@ -18709,35 +18686,46 @@ "stylelint": ">=14.0.0" } }, + "node_modules/stylelint-config-recommended": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-8.0.0.tgz", + "integrity": "sha512-IK6dWvE000+xBv9jbnHOnBq01gt6HGVB2ZTsot+QsMpe82doDQ9hvplxfv4YnpEuUwVGGd9y6nbaAnhrjcxhZQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "stylelint": "^14.8.0" + } + }, "node_modules/stylelint-config-recommended-scss": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-12.0.0.tgz", - "integrity": "sha512-5Bb2mlGy6WLa30oNeKpZvavv2lowJUsUJO25+OA68GFTemlwd1zbFsL7q0bReKipOSU3sG47hKneZ6Nd+ctrFA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-7.0.0.tgz", + "integrity": "sha512-rGz1J4rMAyJkvoJW4hZasuQBB7y9KIrShb20l9DVEKKZSEi1HAy0vuNlR8HyCKy/jveb/BdaQFcoiYnmx4HoiA==", "dev": true, "peer": true, "dependencies": { - "postcss-scss": "^4.0.6", - "stylelint-config-recommended": "^12.0.0", - "stylelint-scss": "^5.0.0" + "postcss-scss": "^4.0.2", + "stylelint-config-recommended": "^8.0.0", + "stylelint-scss": "^4.0.0" }, "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^15.5.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } + "stylelint": "^14.4.0" } }, - "node_modules/stylelint-config-recommended-scss/node_modules/stylelint-config-recommended": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-12.0.0.tgz", - "integrity": "sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ==", + "node_modules/stylelint-config-recommended-scss/node_modules/postcss-scss": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.4.tgz", + "integrity": "sha512-aBBbVyzA8b3hUL0MGrpydxxXKXFZc5Eqva0Q3V9qsBOLEMsjb6w49WfpsoWzpEgcqJGW4t7Rio8WXVU9Gd8vWg==", "dev": true, "peer": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, "peerDependencies": { - "stylelint": "^15.5.0" + "postcss": "^8.3.3" } }, "node_modules/stylelint-config-recommended-vue": { @@ -18809,15 +18797,15 @@ "peer": true }, "node_modules/stylelint-scss": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.0.1.tgz", - "integrity": "sha512-n87iCRZrr2J7//I/QFsDXxFLnHKw633U4qvWZ+mOW6KDAp/HLj06H+6+f9zOuTYy+MdGdTuCSDROCpQIhw5fvQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz", + "integrity": "sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==", "dev": true, "peer": true, "dependencies": { "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { @@ -23604,9 +23592,9 @@ } }, "@nextcloud/stylelint-config": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@nextcloud/stylelint-config/-/stylelint-config-2.3.1.tgz", - "integrity": "sha512-Bhz0xIC2SWS2ihzRFCkKuEc7M1WeHeImu7JvmBZfdxlcM7FuFwV8L8JIIsnzKED1xd6ZtmAlPYWstE8hMKwOxQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/stylelint-config/-/stylelint-config-2.3.0.tgz", + "integrity": "sha512-5mtWqqwrXFXekGT0I8PtVYxJAUQXYwMF28e2MBFbsbyCv+XVzFn9rOYAn6xUG1PrsIeEnom0xlQdrrjpJc71oA==", "dev": true, "requires": {} }, @@ -33131,14 +33119,6 @@ "dev": true, "peer": true }, - "postcss-scss": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz", - "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==", - "dev": true, - "peer": true, - "requires": {} - }, "postcss-selector-parser": { "version": "6.0.13", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", @@ -34607,22 +34587,30 @@ "peer": true, "requires": {} }, + "stylelint-config-recommended": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-8.0.0.tgz", + "integrity": "sha512-IK6dWvE000+xBv9jbnHOnBq01gt6HGVB2ZTsot+QsMpe82doDQ9hvplxfv4YnpEuUwVGGd9y6nbaAnhrjcxhZQ==", + "dev": true, + "peer": true, + "requires": {} + }, "stylelint-config-recommended-scss": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-12.0.0.tgz", - "integrity": "sha512-5Bb2mlGy6WLa30oNeKpZvavv2lowJUsUJO25+OA68GFTemlwd1zbFsL7q0bReKipOSU3sG47hKneZ6Nd+ctrFA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-7.0.0.tgz", + "integrity": "sha512-rGz1J4rMAyJkvoJW4hZasuQBB7y9KIrShb20l9DVEKKZSEi1HAy0vuNlR8HyCKy/jveb/BdaQFcoiYnmx4HoiA==", "dev": true, "peer": true, "requires": { - "postcss-scss": "^4.0.6", - "stylelint-config-recommended": "^12.0.0", - "stylelint-scss": "^5.0.0" + "postcss-scss": "^4.0.2", + "stylelint-config-recommended": "^8.0.0", + "stylelint-scss": "^4.0.0" }, "dependencies": { - "stylelint-config-recommended": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-12.0.0.tgz", - "integrity": "sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ==", + "postcss-scss": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.4.tgz", + "integrity": "sha512-aBBbVyzA8b3hUL0MGrpydxxXKXFZc5Eqva0Q3V9qsBOLEMsjb6w49WfpsoWzpEgcqJGW4t7Rio8WXVU9Gd8vWg==", "dev": true, "peer": true, "requires": {} @@ -34679,15 +34667,15 @@ } }, "stylelint-scss": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.0.1.tgz", - "integrity": "sha512-n87iCRZrr2J7//I/QFsDXxFLnHKw633U4qvWZ+mOW6KDAp/HLj06H+6+f9zOuTYy+MdGdTuCSDROCpQIhw5fvQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz", + "integrity": "sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==", "dev": true, "peer": true, "requires": { "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0" } }, diff --git a/src/components/board/SharingTabSidebar.vue b/src/components/board/SharingTabSidebar.vue index baf1de914..f5707c106 100644 --- a/src/components/board/SharingTabSidebar.vue +++ b/src/components/board/SharingTabSidebar.vue @@ -79,7 +79,7 @@ import { mapGetters, mapState } from 'vuex' import { getCurrentUser } from '@nextcloud/auth' import { showError, showSuccess } from '@nextcloud/dialogs' import { loadState } from '@nextcloud/initial-state' -import debounce from 'lodash/debounce' +import debounce from 'lodash/debounce.js' export default { name: 'SharingTabSidebar', diff --git a/src/components/card/CommentItem.vue b/src/components/card/CommentItem.vue index 17236639f..4e7474a25 100644 --- a/src/components/card/CommentItem.vue +++ b/src/components/card/CommentItem.vue @@ -70,7 +70,7 @@ import CommentForm from './CommentForm.vue' import { getCurrentUser } from '@nextcloud/auth' import md5 from 'blueimp-md5' import relativeDate from '../../mixins/relativeDate.js' -import ReplyIcon from 'vue-material-design-icons/Reply' +import ReplyIcon from 'vue-material-design-icons/Reply.vue' const AtMention = { name: 'AtMention', diff --git a/src/components/card/Description.vue b/src/components/card/Description.vue index c389fb421..fc06b75b0 100644 --- a/src/components/card/Description.vue +++ b/src/components/card/Description.vue @@ -83,7 +83,7 @@ import { NcActions, NcActionButton, NcModal } from '@nextcloud/vue' import { formatFileSize } from '@nextcloud/files' import { generateUrl } from '@nextcloud/router' import { mapState, mapGetters } from 'vuex' -import PaperclipIcon from 'vue-material-design-icons/Paperclip' +import PaperclipIcon from 'vue-material-design-icons/Paperclip.vue' const markdownIt = new MarkdownIt({ linkify: true, @@ -100,7 +100,7 @@ markdownIt.use(MarkdownItLinkAttributes, { export default { name: 'Description', components: { - VueEasymde: () => import('vue-easymde/dist/VueEasyMDE.common'), + VueEasymde: () => import('vue-easymde/dist/VueEasyMDE.common.js'), NcActions, NcActionButton, NcModal, diff --git a/src/components/cards/CardMenu.vue b/src/components/cards/CardMenu.vue index 95112684d..6df8ac73b 100644 --- a/src/components/cards/CardMenu.vue +++ b/src/components/cards/CardMenu.vue @@ -94,8 +94,8 @@ import { generateUrl } from '@nextcloud/router' import { getCurrentUser } from '@nextcloud/auth' import { showUndo } from '@nextcloud/dialogs' import '@nextcloud/dialogs/styles/toast.scss' -import ArchiveIcon from 'vue-material-design-icons/Archive' -import CardBulletedIcon from 'vue-material-design-icons/CardBulleted' +import ArchiveIcon from 'vue-material-design-icons/Archive.vue' +import CardBulletedIcon from 'vue-material-design-icons/CardBulleted.vue' export default { name: 'CardMenu', diff --git a/src/components/navigation/AppNavigationBoard.vue b/src/components/navigation/AppNavigationBoard.vue index ada08513d..dadbbccee 100644 --- a/src/components/navigation/AppNavigationBoard.vue +++ b/src/components/navigation/AppNavigationBoard.vue @@ -140,8 +140,8 @@