From 94fc354f7151aff2c27c8dc17d6e3e1cc20183f7 Mon Sep 17 00:00:00 2001 From: Ismo Vuorinen Date: Mon, 24 Apr 2023 00:04:28 +0300 Subject: [PATCH] Added workflows & moved stuff around --- .editorconfig | 41 +++++++++ .github/CODEOWNERS | 1 + .github/labels.yml | 88 ++++++++++++++++++ renovate.json => .github/renovate.json | 0 .github/workflows/composer-install.yml | 3 +- .github/workflows/compress-images.yml | 1 + .github/workflows/dependency-review.yml | 1 + .github/workflows/laravel-phpunit.yml | 55 ++++++++++++ .github/workflows/pr-compress-images.yml | 1 + .github/workflows/release-drafter.yml | 16 ++++ .github/workflows/reviewdog-linters.yml | 52 +++++++++++ .github/workflows/stale.yml | 41 +++++++++ .../workflows/sync-labels-to-own-projects.yml | 39 ++++++++ .github/workflows/sync-labels.yml | 31 +++++++ .yamllint.yml | 15 ++++ README.md | 8 +- renovate-config.json | 89 ++++++++++--------- 17 files changed, 436 insertions(+), 46 deletions(-) create mode 100644 .editorconfig create mode 100644 .github/CODEOWNERS create mode 100644 .github/labels.yml rename renovate.json => .github/renovate.json (100%) create mode 100644 .github/workflows/laravel-phpunit.yml create mode 100644 .github/workflows/release-drafter.yml create mode 100644 .github/workflows/reviewdog-linters.yml create mode 100644 .github/workflows/stale.yml create mode 100644 .github/workflows/sync-labels-to-own-projects.yml create mode 100644 .github/workflows/sync-labels.yml create mode 100644 .yamllint.yml diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3586281 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,41 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +max_line_length = 160 +tab_width = 2 +trim_trailing_whitespace = true + +[*.css] +indent_size = 4 +tab_width = 4 + +[{*.sass,*.scss}] +tab_width = 4 + +[{*.ant,*.fxml,*.jhm,*.jnlp,*.jrxml,*.rng,*.tld,*.wsdl,*.xml,*.xsd,*.xsl,*.xslt,*.xul,phpunit.xml.dist}] +indent_size = 4 +tab_width = 4 + +[{*.ats,*.cts,*.mts,*.ts}] +indent_size = 4 +tab_width = 4 + +[{*.ctp,*.hphp,*.inc,*.module,*.php,*.php4,*.php5,*.phtml,application,branch-usage-checker}] +indent_size = 4 +max_line_length = 110 +tab_width = 4 + +[{*.har,*.jsb2,*.jsb3,*.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,bowerrc,composer.lock,jest.config}] +indent_size = 2 +tab_width = 2 + +[{*.mk,GNUmakefile,makefile}] +tab_width = 4 + +[{*.tf,*.tfvars}] +tab_width = 4 diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..a5ff83b --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @ivuorinen diff --git a/.github/labels.yml b/.github/labels.yml new file mode 100644 index 0000000..56ab9ac --- /dev/null +++ b/.github/labels.yml @@ -0,0 +1,88 @@ +--- +- name: "breaking-change" + color: ee0701 + description: "A breaking change for existing users." +- name: "bugfix" + color: ee0701 + description: "Inconsistencies or issues which will cause a problem for users or implementors." +- name: "documentation" + color: 0052cc + description: "Solely about the documentation of the project." +- name: "enhancement" + color: 1d76db + description: "Enhancement of the code, not introducing new features." +- name: "refactor" + color: 1d76db + description: "Improvement of existing code, not introducing new features." +- name: "performance" + color: 1d76db + description: "Improving performance, not introducing new features." +- name: "new-feature" + color: 0e8a16 + description: "New features or options." +- name: "maintenance" + color: 2af79e + description: "Generic maintenance tasks." +- name: "ci" + color: 1d76db + description: "Work that improves the continue integration." +- name: "dependencies" + color: 1d76db + description: "Upgrade or downgrade of project dependencies." +- name: "translations" + color: d4c5f9 + description: "Impacts translations." + +- name: "in-progress" + color: fbca04 + description: "Issue is currently being resolved by a developer." +- name: "stale" + color: fef2c0 + description: "There has not been activity on this issue or PR for quite some time." +- name: "no-stale" + color: fef2c0 + description: "This issue or PR is exempted from the stable bot." + +- name: "security" + color: ee0701 + description: "Marks a security issue that needs to be resolved asap." +- name: "incomplete" + color: fef2c0 + description: "Marks a PR or issue that is missing information." +- name: "invalid" + color: fef2c0 + description: "Marks a PR or issue that is missing information." + +- name: "beginner-friendly" + color: 0e8a16 + description: "Good first issue for people wanting to contribute to the project." +- name: "help-wanted" + color: 0e8a16 + description: "We need some extra helping hands or expertise in order to resolve this." + +- name: "hacktoberfest" + description: "Issues/PRs are participating in the Hacktoberfest." + color: fbca04 +- name: "hacktoberfest-accepted" + description: "Issues/PRs are participating in the Hacktoberfest." + color: fbca04 + +- name: "priority-critical" + color: ee0701 + description: "This should be dealt with ASAP. Not fixing this issue would be a serious error." +- name: "priority-high" + color: b60205 + description: "After critical issues are fixed, these should be dealt with before any further issues." +- name: "priority-medium" + color: 0e8a16 + description: "This issue may be useful, and needs some attention." +- name: "priority-low" + color: e4ea8a + description: "Nice addition, maybe... someday..." + +- name: "major" + color: b60205 + description: "This PR causes a major version bump in the version number." +- name: "minor" + color: 0e8a16 + description: "This PR causes a minor version bump in the version number." diff --git a/renovate.json b/.github/renovate.json similarity index 100% rename from renovate.json rename to .github/renovate.json diff --git a/.github/workflows/composer-install.yml b/.github/workflows/composer-install.yml index ef2fb07..89a30b3 100644 --- a/.github/workflows/composer-install.yml +++ b/.github/workflows/composer-install.yml @@ -1,3 +1,4 @@ +--- name: Run Composer Install on: @@ -14,7 +15,7 @@ jobs: strategy: matrix: operating-system: ['ubuntu-latest'] - php-versions: ['8.0', '8.1'] + php-versions: ['8.0', '8.1', '8.2'] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/compress-images.yml b/.github/workflows/compress-images.yml index 7c037c5..cc95dfd 100644 --- a/.github/workflows/compress-images.yml +++ b/.github/workflows/compress-images.yml @@ -1,3 +1,4 @@ +--- # Compress images on demand (workflow_dispatch), and at 11pm every Sunday (schedule). # Open a Pull Request if any images can be compressed. name: Compress Images on Demand diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 50e43bd..bcf87f2 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -1,3 +1,4 @@ +--- # Dependency Review Action # # This Action will scan dependency manifest files that change as part of a Pull Request, diff --git a/.github/workflows/laravel-phpunit.yml b/.github/workflows/laravel-phpunit.yml new file mode 100644 index 0000000..3f31d61 --- /dev/null +++ b/.github/workflows/laravel-phpunit.yml @@ -0,0 +1,55 @@ +--- +name: Laravel Setup and Composer test + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + laravel-tests: + + runs-on: ubuntu-latest + + steps: + - uses: shivammathur/setup-php@v2 + with: + php-version: '8.1' + + - uses: actions/checkout@v3 + + - name: "Check file existence" + id: check_files + uses: andstor/file-existence-action@v2 + with: + files: "package.json, artisan" + + - name: Copy .env + if: steps.check_files.outputs.files_exists == 'true' + run: php -r "file_exists('.env') || copy('.env.example', '.env');" + + - name: Install Dependencies + if: steps.check_files.outputs.files_exists == 'true' + run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist + + - name: Generate key + if: steps.check_files.outputs.files_exists == 'true' + run: php artisan key:generate + + - name: Directory Permissions + if: steps.check_files.outputs.files_exists == 'true' + run: chmod -R 777 storage bootstrap/cache + + - name: Create Database + if: steps.check_files.outputs.files_exists == 'true' + run: | + mkdir -p database + touch database/database.sqlite + + - name: Execute composer test (Unit and Feature tests) + if: steps.check_files.outputs.files_exists == 'true' + env: + DB_CONNECTION: sqlite + DB_DATABASE: database/database.sqlite + run: composer test diff --git a/.github/workflows/pr-compress-images.yml b/.github/workflows/pr-compress-images.yml index 81c10f8..b185d98 100644 --- a/.github/workflows/pr-compress-images.yml +++ b/.github/workflows/pr-compress-images.yml @@ -1,3 +1,4 @@ +--- name: Compress Images on: pull_request: diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml new file mode 100644 index 0000000..3581394 --- /dev/null +++ b/.github/workflows/release-drafter.yml @@ -0,0 +1,16 @@ +--- +name: Release Drafter + +# yamllint disable-line rule:truthy +on: + workflow_call: + +jobs: + update_release_draft: + name: โœ๏ธ Draft release + runs-on: ubuntu-latest + steps: + - name: ๐Ÿš€ Run Release Drafter + uses: release-drafter/release-drafter@v5.23.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/reviewdog-linters.yml b/.github/workflows/reviewdog-linters.yml new file mode 100644 index 0000000..e04f849 --- /dev/null +++ b/.github/workflows/reviewdog-linters.yml @@ -0,0 +1,52 @@ +--- +name: Reviewdog Linters + +on: [push] + +jobs: + linters: + name: Linters + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: GitHub Actions + uses: reviewdog/action-actionlint@v1 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + reporter: github-pr-review + + - name: detect-secrets + uses: reviewdog/action-detect-secrets@master + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + reporter: github-pr-review + + - name: markdownlint + uses: reviewdog/action-markdownlint@v0 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + reporter: github-pr-review + + - name: shfmt + uses: reviewdog/action-shfmt@v1 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + shfmt_flags: | + --find + --list + --write + --diff + --simplify + --language-dialect bash + --indent 2 + --binary-next-line + --case-indent + --space-redirects + --func-next-line + + - name: yamllint + uses: reviewdog/action-yamllint@v1 + with: + github_token: ${{ secrets.github_token }} + reporter: github-pr-review diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000..22434df --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,41 @@ +--- +name: Stale + +# yamllint disable-line rule:truthy +on: + schedule: + - cron: "0 8 * * *" + workflow_call: + workflow_dispatch: + +jobs: + stale: + name: ๐Ÿงน Clean up stale issues and PRs + runs-on: ubuntu-latest + steps: + - name: ๐Ÿš€ Run stale + uses: actions/stale@v8.0.0 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + days-before-stale: 30 + days-before-close: 7 + remove-stale-when-updated: true + stale-issue-label: "stale" + exempt-issue-labels: "no-stale,help-wanted" + stale-issue-message: > + There hasn't been any activity on this issue recently, so we + clean up some of the older and inactive issues. + + Please make sure to update to the latest version and + check if that solves the issue. Let us know if that works for you + by leaving a comment ๐Ÿ‘ + + This issue has now been marked as stale and will be closed if no + further activity occurs. Thanks! + stale-pr-label: "stale" + exempt-pr-labels: "no-stale" + stale-pr-message: > + There hasn't been any activity on this pull request recently. This + pull request has been automatically marked as stale because of that + and will be closed if no further activity occurs within 7 days. + Thank you for your contributions. diff --git a/.github/workflows/sync-labels-to-own-projects.yml b/.github/workflows/sync-labels-to-own-projects.yml new file mode 100644 index 0000000..0d1eeb5 --- /dev/null +++ b/.github/workflows/sync-labels-to-own-projects.yml @@ -0,0 +1,39 @@ +--- +name: Sync labels to other repositories + +on: + push: + branches: + - main + paths: + - .github/labels.yml + +jobs: + sync-labels: + runs-on: ubuntu-latest + outputs: + repos: ${{ steps.repos.outputs.REPOS }} + steps: + - uses: actions/checkout@v2 + + - name: Get Repositories + id: repos + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + REPOS="$( + gh repo list ivuorinen \ + --no-archived \ + --source \ + --limit 15 \ + --json nameWithOwner -q '.[] | .nameWithOwner' \ + | sed 's|\"||' + )" + + echo "REPOS='$REPOS'" >> $GITHUB_ENV + + - uses: micnncim/action-label-syncer@v1 + with: + prune: false + repository: ${{ needs.sync-labels.outputs.repos }} + token: ${{ secrets.PERSONAL_TOKEN }} diff --git a/.github/workflows/sync-labels.yml b/.github/workflows/sync-labels.yml new file mode 100644 index 0000000..8f84574 --- /dev/null +++ b/.github/workflows/sync-labels.yml @@ -0,0 +1,31 @@ +--- +name: Sync labels + +# yamllint disable-line rule:truthy +on: + push: + branches: + - main + paths: + - .github/labels.yml + schedule: + - cron: "34 5 * * *" + workflow_call: + workflow_dispatch: + +jobs: + labels: + name: โ™ป๏ธ Sync labels + runs-on: ubuntu-latest + steps: + - name: โคต๏ธ Download latest labels definitions + run: | + curl -s --retry 5 \ + "https://raw.githubusercontent.com/ivuorinen/.github/main/.github/labels.yml" \ + > labels.yml + - name: ๐Ÿš€ Run Label Syncer + uses: micnncim/action-label-syncer@v1.3.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + manifest: labels.yml diff --git a/.yamllint.yml b/.yamllint.yml new file mode 100644 index 0000000..0df56c7 --- /dev/null +++ b/.yamllint.yml @@ -0,0 +1,15 @@ +--- +extends: default + +ignore-from-file: .gitignore + +yaml-files: + - '*.yaml' + - '*.yml' + - '.yamllint.yml' + +rules: + line-length: + max: 120 + level: warning + truthy: disable diff --git a/README.md b/README.md index 1d47a2e..13e509c 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,13 @@ Actions should be linked using the `uses` keyword. Read more from the Reusing wo ```yml jobs: CompressImages: - uses: ivuorinen/.github/.github/workflows/compress-images.yml + uses: ivuorinen/.github/workflows/compress-images.yml ReusableMatrixJobForComposerInstall: strategy: matrix: - target: ['8.0', '8.1'] - uses: ivuorinen/.github/.github/workflows/composer-install.yml@main + target: ['8.0', '8.1', '8.2'] + uses: ivuorinen/.github/workflows/composer-install.yml@main with: php-versions: ${{ matrix.target }} ``` @@ -24,7 +24,7 @@ jobs: ### Renovate config -Go through [the onboarding process](https://docs.renovatebot.com/getting-started/installing-onboarding/) and save the following snippet as `renovate.json` in the project root. +Go through [the onboarding process](https://docs.renovatebot.com/getting-started/installing-onboarding/) and save the following snippet as `.github/renovate.json`. ```json { diff --git a/renovate-config.json b/renovate-config.json index 0773d5d..3a7a5fe 100644 --- a/renovate-config.json +++ b/renovate-config.json @@ -1,46 +1,53 @@ { - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "description": "Renovate config for projects ivuorinen manages", + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "description": "Renovate config for projects ivuorinen manages", + "extends": [ + "config:base", + ":preserveSemverRanges", + ":enableVulnerabilityAlerts", + ":semanticCommits", + ":labels(dependencies)", + ":maintainLockFilesWeekly", + "schedule:nonOfficeHours", + "docker:disableMajor", + "npm:unpublishSafe", + "group:recommended", + "replacements:all", + "workarounds:all" + ], + "dependencyDashboardLabels": [ + "no-stale" + ], + "lockFileMaintenance": { "extends": [ - "config:base", - ":preserveSemverRanges", - ":enableVulnerabilityAlerts", - ":semanticCommits", - ":labels(dependencies)", - ":maintainLockFilesWeekly", - "schedule:nonOfficeHours", - "docker:disableMajor", - "npm:unpublishSafe", - "group:recommended", - "replacements:all", - "workarounds:all" + "group:all" ], - "lockFileMaintenance": { - "extends": [ - "group:all" - ], - "commitMessageAction": "Update" + "commitMessageAction": "Update" + }, + "packageRules": [ + { + "matchUpdateTypes": [ + "patch" + ], + "matchCurrentVersion": "!/^0/", + "groupName": "devDependencies (patch)", + "automerge": true }, - "packageRules": [ - { - "matchUpdateTypes": ["patch"], - "matchCurrentVersion": "!/^0/", - "groupName": "devDependencies (patch)", - "automerge": true - }, - { - "matchPackagePatterns": ["eslint"], - "groupName": "eslint" - } - ], - "digest": { - "enabled": false - }, - "separateMinorPatch": false, - "separateMajorMinor": true, - "separateMultipleMajor": true, - "vulnerabilityAlerts": { - "enabled": true - }, - "commitBody": "Signed-off-by: {{{gitAuthor}}}" + { + "matchPackagePatterns": [ + "eslint" + ], + "groupName": "eslint" + } + ], + "digest": { + "enabled": false + }, + "separateMinorPatch": false, + "separateMajorMinor": true, + "separateMultipleMajor": true, + "vulnerabilityAlerts": { + "enabled": true + }, + "commitBody": "Signed-off-by: {{{gitAuthor}}}" }