Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: add Danger support #267

Open
wants to merge 124 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
992bbc7
style: add ktlint support
FlaviuExtPrimer Jan 8, 2025
4397f39
style: add detekt support, set line length to 120 characters
FlaviuExtPrimer Jan 8, 2025
9e5f7b9
style: fix detekt issues
FlaviuExtPrimer Jan 8, 2025
ce3b3ab
style: fix lint
FlaviuExtPrimer Jan 8, 2025
43bed56
style: add swiftlint support
FlaviuExtPrimer Jan 9, 2025
ae0e7a2
chore: update Prettier and lint TS/JS/JSON files
FlaviuExtPrimer Jan 13, 2025
37adde1
chore: remove excluded swiftlint folder
FlaviuExtPrimer Jan 13, 2025
674fbd0
chore: fix TS lint and useEffect issues
FlaviuExtPrimer Jan 24, 2025
4e9b9e7
chore(ACC-4943): merge ktlint into detekt
FlaviuExtPrimer Jan 28, 2025
b480b80
style: format Android files
FlaviuExtPrimer Jan 28, 2025
b528587
Merge remote-tracking branch 'origin' into style/ACC-4791/add-lint-su…
FlaviuExtPrimer Jan 31, 2025
951a767
style: fix detekt issues
FlaviuExtPrimer Jan 31, 2025
02e07d3
style: lint swift (part 2)
FlaviuExtPrimer Jan 31, 2025
7d1ffc1
chore: add initial Danger JS, Swift and Kotlin support
FlaviuExtPrimer Feb 3, 2025
9f9681a
chore: update concurrency group ids for Danger
FlaviuExtPrimer Feb 3, 2025
66aa671
chore: update Danger-Kotlin working dir
FlaviuExtPrimer Feb 3, 2025
67eac23
chore: prevent build until Danger is completed
FlaviuExtPrimer Feb 3, 2025
c4ed56f
chore: update danger-swift
FlaviuExtPrimer Feb 3, 2025
59aa70d
chore: downgrade danger-swift
FlaviuExtPrimer Feb 3, 2025
ff7212e
chore: add dummy swift files
FlaviuExtPrimer Feb 3, 2025
e989aa5
Revert "chore: add dummy swift files"
FlaviuExtPrimer Feb 3, 2025
da017ba
chore: attempt to override container JDK
FlaviuExtPrimer Feb 3, 2025
3a8da14
chore: attempt to downgrade JDK without sudo
FlaviuExtPrimer Feb 3, 2025
6254150
chore: update Java downgrade code
FlaviuExtPrimer Feb 3, 2025
9bfdf43
chore: attempt Gradle Java version fix
FlaviuExtPrimer Feb 3, 2025
0a8af26
chore: debug Gradle version
FlaviuExtPrimer Feb 3, 2025
2b62d6f
chore: debug JAVA_HOME
FlaviuExtPrimer Feb 3, 2025
5e3b099
chore: try 2
FlaviuExtPrimer Feb 3, 2025
3b655af
chore: fix JAVA_HOME
FlaviuExtPrimer Feb 3, 2025
c9fc606
chore: fix JAVA_HOME
FlaviuExtPrimer Feb 3, 2025
5ff9a31
chore: run 'yarn install'
FlaviuExtPrimer Feb 3, 2025
0d65f6b
chore: install yarn
FlaviuExtPrimer Feb 3, 2025
bbc5fba
chore: add Android SDK
FlaviuExtPrimer Feb 3, 2025
c462653
chore: verify env
FlaviuExtPrimer Feb 3, 2025
aa19f14
chore: attempt to fix Android paths
FlaviuExtPrimer Feb 3, 2025
25b5600
chore: try to fix Android PATH
FlaviuExtPrimer Feb 3, 2025
9c3b4c6
chore: ...
FlaviuExtPrimer Feb 3, 2025
eee1a30
chore: ...
FlaviuExtPrimer Feb 3, 2025
bea725c
chore: ...
FlaviuExtPrimer Feb 3, 2025
af809f3
chore: ..
FlaviuExtPrimer Feb 3, 2025
2db11eb
chore: create local.properties instead of defining env variable
FlaviuExtPrimer Feb 3, 2025
d9daba4
chore: update Android SDK path
FlaviuExtPrimer Feb 3, 2025
7944440
chore: update Android path
FlaviuExtPrimer Feb 3, 2025
45d286d
chore: update Android path
FlaviuExtPrimer Feb 3, 2025
63c1317
chore: use Android SDK action
FlaviuExtPrimer Feb 3, 2025
e965e39
chore: ...
FlaviuExtPrimer Feb 3, 2025
6b2f945
chore: adjust kts syntax
FlaviuExtPrimer Feb 3, 2025
0009ec5
chore: fix kts
FlaviuExtPrimer Feb 3, 2025
8c698cc
chore: fix file reading
FlaviuExtPrimer Feb 3, 2025
416915a
chore: add dummy Kotlin file, break detekt
FlaviuExtPrimer Feb 3, 2025
6b19017
chore: updated danger-kotlin to run Danger after failing Detekt
FlaviuExtPrimer Feb 3, 2025
a254f67
chore: update detekt report name
FlaviuExtPrimer Feb 3, 2025
5fd0685
chore: register Detekt
FlaviuExtPrimer Feb 3, 2025
21741f8
chore: register Detekt
FlaviuExtPrimer Feb 3, 2025
70c39fd
Revert "chore: updated danger-kotlin to run Danger after failing Detekt"
FlaviuExtPrimer Feb 3, 2025
2d5ac70
chore: replace npm with yarn
FlaviuExtPrimer Feb 3, 2025
67b59ec
chore: fix dangerfile reference
FlaviuExtPrimer Feb 3, 2025
f365927
chore: add prettierignore
FlaviuExtPrimer Feb 3, 2025
e84e49e
chore: restore detekt error suppression
FlaviuExtPrimer Feb 3, 2025
6e9583a
chore: add flags to JS danger
FlaviuExtPrimer Feb 3, 2025
cc11ee3
chore: fix danger flags
FlaviuExtPrimer Feb 3, 2025
a367b57
chore: move prettierignore to root
FlaviuExtPrimer Feb 3, 2025
639eef9
chore: remove danger-kotlin test files
FlaviuExtPrimer Feb 4, 2025
52566dc
style: lint using newest Prettier + ESLint
FlaviuExtPrimer Feb 4, 2025
faf8a0e
style: lint
FlaviuExtPrimer Feb 4, 2025
7f8a9af
chore: migrate to latest eslint and prettier, migrate linter configs,…
FlaviuExtPrimer Feb 4, 2025
69e98b9
style: fix lint issues
FlaviuExtPrimer Feb 4, 2025
77cc713
chore: fix lint config
FlaviuExtPrimer Feb 4, 2025
c32e7c2
chore: downgrade eslint/js for compat with eslint-ts
FlaviuExtPrimer Feb 4, 2025
a4bdd56
chore: exclude scripts dir
FlaviuExtPrimer Feb 4, 2025
24ac429
chore: add eslint scripts to all packages
FlaviuExtPrimer Feb 4, 2025
51bb587
chore: replace dummy/empty Prettier-Danger integration with ESLint
FlaviuExtPrimer Feb 4, 2025
034b799
chore: update ignoring in prettier and eslint
FlaviuExtPrimer Feb 6, 2025
40ce3d5
chore: use ESLint library instead of running eslint command via dange…
FlaviuExtPrimer Feb 6, 2025
bc0f82b
chore: update dangerfile.ts to discriminate between warning and failures
FlaviuExtPrimer Feb 6, 2025
2dc1408
chore: run danger sequentially
FlaviuExtPrimer Feb 6, 2025
298f2df
chore: add dummy test file for swift
FlaviuExtPrimer Feb 6, 2025
1e3b214
chore: cleanup Dangerfile.df.kts
FlaviuExtPrimer Feb 6, 2025
8b56f89
chore: add test code for swift, disable other danger workflows
FlaviuExtPrimer Feb 6, 2025
02ddbd8
chore: update swift and kt dangerfiles to better account for files th…
FlaviuExtPrimer Feb 6, 2025
78cdd95
chore: fix dangerfile.swift
FlaviuExtPrimer Feb 6, 2025
65d78d5
chore: improve swift-kt danger consistency
FlaviuExtPrimer Feb 6, 2025
9a10ed8
chore: fix interp in swift
FlaviuExtPrimer Feb 6, 2025
68de4c1
chore: fix dangerfile.swiftlint dummy
FlaviuExtPrimer Feb 6, 2025
a964429
chore: restore if-else in dangerfile.swift, re-enable js, kt
FlaviuExtPrimer Feb 6, 2025
a0ba446
chore: manually remove previous danger comments to avoid overriding
FlaviuExtPrimer Feb 6, 2025
325f85e
chore: update comment deletion pattern
FlaviuExtPrimer Feb 6, 2025
5bf37e9
chore: fix JS regex
FlaviuExtPrimer Feb 6, 2025
695f438
chore: run jobs seq
FlaviuExtPrimer Feb 6, 2025
c5a3931
chore: attempt to fix regex
FlaviuExtPrimer Feb 6, 2025
6d9c245
chore: attempt to fix danger comment deletion
FlaviuExtPrimer Feb 6, 2025
f7b5388
chore: try
FlaviuExtPrimer Feb 6, 2025
465aaa8
chore: fix
FlaviuExtPrimer Feb 6, 2025
a7fa7e2
chore: revert back to using removal flag for danger, introduce id so …
FlaviuExtPrimer Feb 6, 2025
a55b974
chore: up
FlaviuExtPrimer Feb 6, 2025
8011d32
chore: update
FlaviuExtPrimer Feb 6, 2025
12ea55f
chore: update ids
FlaviuExtPrimer Feb 6, 2025
c7bbaff
chore: add extra info to danger-js
FlaviuExtPrimer Feb 6, 2025
1ff5d93
chore: try different id format
FlaviuExtPrimer Feb 6, 2025
882ae3a
chore: break kt, and swift on purpose
FlaviuExtPrimer Feb 6, 2025
4b20df9
chore: break swift on purpose #2
FlaviuExtPrimer Feb 6, 2025
7d94e55
chore: try out different danger-js logging
FlaviuExtPrimer Feb 6, 2025
434fd9f
chore: add more examples
FlaviuExtPrimer Feb 6, 2025
b13dda9
chore: up
FlaviuExtPrimer Feb 6, 2025
357e33c
chore: up
FlaviuExtPrimer Feb 6, 2025
b3d1afe
chore: new path
FlaviuExtPrimer Feb 6, 2025
2b65904
chore: update path
FlaviuExtPrimer Feb 6, 2025
f5ba0e9
chore: path
FlaviuExtPrimer Feb 6, 2025
b1850c1
chore: always use fail
FlaviuExtPrimer Feb 6, 2025
3341c71
chore: change format
FlaviuExtPrimer Feb 7, 2025
d2ad82f
chore: upgrade eslint, ignores
FlaviuExtPrimer Feb 7, 2025
eb75a43
chore: break AchManager.ts
FlaviuExtPrimer Feb 7, 2025
98b7121
chore: break PrimerSettings.ts
FlaviuExtPrimer Feb 7, 2025
db87999
chore: restore PrimerSettings.ts
FlaviuExtPrimer Feb 7, 2025
3f10251
chore: try eslint-config-prettier
FlaviuExtPrimer Feb 7, 2025
45e787c
chore: remove eslint-config-prettier
FlaviuExtPrimer Feb 7, 2025
b0624d3
chore: cleanup eslint.config.mjs, fix RNTPrimer.swift
FlaviuExtPrimer Feb 7, 2025
47be89e
Merge remote-tracking branch 'origin/master' into chore/ACC-4961/add-…
FlaviuExtPrimer Feb 7, 2025
98522e2
style: lint fix
FlaviuExtPrimer Feb 7, 2025
3f14838
chore: restore default api version
FlaviuExtPrimer Feb 7, 2025
fa2985f
fix: default API version handling
FlaviuExtPrimer Feb 7, 2025
96998fd
style: lint
FlaviuExtPrimer Feb 7, 2025
7ab3fac
style: lint
FlaviuExtPrimer Feb 7, 2025
4678cd7
chore: pbxproj
FlaviuExtPrimer Feb 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .github/workflows/android-build-and-distribute.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
name: Android

on: pull_request
on:
workflow_run:
workflows: ["Danger (JS)", "Danger (Swift)", "Danger (Kotlin)"]
types: [completed]

jobs:
android-distribute-to-appetize:
runs-on: ubuntu-latest
name: "Build and upload app to Appetize 🚀"
steps:

- name: Cancel previous jobs
uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # v0.12.1
with:
Expand Down
32 changes: 32 additions & 0 deletions .github/workflows/danger-js.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Danger (JS)

on:
pull_request:
types:
- opened
- edited
- synchronize

concurrency:
group: ${{ github.ref }}-danger-js
cancel-in-progress: true

jobs:
danger-js:
runs-on: ubuntu-latest
name: "Run Danger JS"
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

- name: Set up Node.js
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: 18

- name: Install Dependencies
run: yarn install

- name: Run Danger JS
run: npx danger ci --id js --dangerfile dangerfile.ts --failOnErrors --removePreviousComments
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
52 changes: 52 additions & 0 deletions .github/workflows/danger-kotlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Danger (Kotlin)

on:
workflow_run:
workflows: ["Danger (JS)"]
types: [completed]
pull_request:
types:
- opened
- edited
- synchronize

concurrency:
group: ${{ github.ref }}-danger-kotlin
cancel-in-progress: true

jobs:
danger-kotlin:
runs-on: ubuntu-latest
name: "Run Danger Kotlin"
container:
image: docker://ghcr.io/danger/danger-kotlin:1.3.3
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

- name: Install Yarn
run: npm install -g yarn

- name: Install dependencies with Yarn
run: yarn install
working-directory: packages/example

# Override container JDK
- name: Set up JDK 17
run: |
apt-get update
apt-get install -y openjdk-17-jdk

- name: Set up Android SDK
uses: android-actions/setup-android@v3

- name: Set sdk.dir in local.properties
run: echo "sdk.dir=/usr/lib/android-sdk" > packages/example/android/local.properties

- name: Run detekt
run: ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 detekt || echo "Detekt completed with errors, running Danger..."
working-directory: packages/example/android

- name: Run Danger Kotlin
run: danger-kotlin ci --id=kt --failOnErrors --no-publish-check --remove-previous-comments
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
29 changes: 29 additions & 0 deletions .github/workflows/danger-swift.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Danger (Swift)

on:
workflow_run:
workflows: ["Danger (JS)", "Danger (Kotlin)"]
types: [completed]
pull_request:
types:
- opened
- edited
- synchronize

concurrency:
group: ${{ github.ref }}-danger-swift
cancel-in-progress: true

jobs:
danger-swift:
runs-on: ubuntu-latest
name: "Run Danger"
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

- name: Danger
uses: docker://ghcr.io/danger/danger-swift-with-swiftlint:3.15.0
with:
args: --id=swift --failOnErrors --no-publish-check --remove-previous-comments
env:
GITHUB_TOKEN: ${{ github.token }}
6 changes: 5 additions & 1 deletion .github/workflows/ios-build-and-distribute.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: iOS
on: pull_request
on:
workflow_run:
workflows: ["Danger (JS)", "Danger (Swift)", "Danger (Kotlin)"]
types: [completed]

jobs:

build-and-upload-to-appetize:
Expand Down
11 changes: 11 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Ignore everything recursively
*

# But not the following
!**/packages/sdk/src/**/*.ts
!**/packages/sdk/src/**/*.tsx
!**/packages/sdk/src/**/*.js
!**/packages/sdk/src/**/*.jsx

# Check subdirectories too
!*/
6 changes: 5 additions & 1 deletion packages/example/.prettierrc.js → .prettierrc.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
module.exports = {
arrowParens: 'avoid',
bracketSameLine: true,
bracketSpacing: false,
singleQuote: true,
trailingComma: 'all',
quoteProps: 'consistent',
tabWidth: 2,
trailingComma: 'es5',
useTabs: false,
printWidth: 120,
};
49 changes: 49 additions & 0 deletions Dangerfile.df.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
@file:DependsOn("xyz.pavelkorolev.danger.detekt:plugin:1.2.0")

import java.io.File
import systems.danger.kotlin.*
import systems.danger.kotlin.models.github.*
import xyz.pavelkorolev.danger.detekt.DetektPlugin

register plugin DetektPlugin

danger(args) {
val allSourceFiles = git.modifiedFiles + git.createdFiles

onGitHub {
// region PR Contains Tests
val kotlinFilesContainingChanges =
allSourceFiles.filter { path: String ->
path.endsWith(".kt") &&
File(path).readText().contains("import org.junit.jupiter.api.Test")
}
if (kotlinFilesContainingChanges.isEmpty()) {
warn(
"This PR doesn't seem to contain any updated Unit Test for Kotlin 🤔. Please consider double checking it 🙏"
)
}
// endregion

// region Detekt
parseDetektReport()
// endregion
}
}

fun parseDetektReport() {
val file = File("packages/sdk/android/build/reports/detekt/detekt.xml")
if (!file.exists()) {
warn("🙈 No detekt report found at ${file.path}")
return
}
with(DetektPlugin) {
val report = parse(file)
val count = report.count
report(report)
if (count == 0) {
message("✅ No detekt violations found.")
} else {
fail("🙁 Found **${report.count}** detekt violations.")
}
}
}
61 changes: 61 additions & 0 deletions Dangerfile.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import Danger
import Foundation

let danger = Danger()
let pr = danger.github.pullRequest
let isReleasePr = pr.head.ref.hasPrefix("release")
let allCreatedAndModifiedFiles = danger.git.modifiedFiles + danger.git.createdFiles
let sdkEditedFiles = allCreatedAndModifiedFiles
.filter { $0.name != "Dangerfile.swift" }
.filter { !$0.hasPrefix("packages/example/ios/") }

// You can use these functions to send feedback:
// message("Highlight something in the table")
// warn("Something pretty bad, but not important enough to fail the build")
// fail("Something that must be changed")
// markdown("Free-form markdown that goes under the table, so you can do whatever.")

// MARK: - Copyright

// Checks whether new files have "Copyright / Created by" mentions

let swiftFilesWithCopyright = sdkEditedFiles.filter {
$0.fileType == .swift &&
danger.utils.readFile($0).contains("// Created by")
}

// if swiftFilesWithCopyright.count > 0 {
// let files = swiftFilesWithCopyright.joined(separator: ", ")
// warn("In Danger we don't include copyright headers, found them in: \(files)")
// }

// MARK: - PR Contains Tests

// Raw check based on created / updated files containing `import XCTest`

let swiftTestFilesContainChanges = sdkEditedFiles.filter {
$0.fileType == .swift &&
danger.utils.readFile($0).contains("import XCTest")
}

if swiftTestFilesContainChanges.isEmpty {
warn("This PR doesn't seem to contain any updated Unit Test for Swift 🤔. Please consider double checking it 🙏")
}

// MARK: - SwiftLint

// Use a different path for SwiftLint

let filesToLint = sdkEditedFiles.filter { $0.fileType == .swift }
let violations = SwiftLint.lint(.files(filesToLint), inline: true, configFile: "packages/example/ios/.swiftlint.yml")

if violations.isEmpty {
message("✅ No SwiftLint violations found.")
} else {
fail("🙁 Found **\(violations.count)** SwiftLint violations.")
}

// MARK: - Check Coverage

// Coverage.xcodeBuildCoverage(.derivedDataFolder("Build"),
// minimumCoverage: 30)
87 changes: 87 additions & 0 deletions dangerfile.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import { danger, warn, fail, message } from 'danger';
import { ESLint } from 'eslint';

const pr = danger.github.pr;
const directory = process.cwd();

// #region PR Length
const bigPrThreshold = 600;
const additions = pr.additions || 0;
const deletions = pr.deletions || 0;

if (additions + deletions > bigPrThreshold) {
warn(
'Pull Request size seems relatively large. If this Pull Request contains multiple changes, please split each into separate PRs for a faster, easier review.'
);
}
// #endregion

// #region WIP PR
if (pr.draft || pr.title.toLowerCase().includes('wip')) {
warn('PR is classed as Work in Progress');
}
// #endregion

// #region PR Assignee
if (pr.assignees.length === 0) {
warn('Please assign someone aside from CODEOWNERS (@checkout-pci-reviewers) to review this PR.');
}
// #endregion

// #region Conventional Commit Title
const validPrefixes = [
'fix',
'feat',
'chore',
'ci',
'refactor',
'docs',
'perf',
'test',
'build',
'revert',
'style',
'BREAKING CHANGE',
];
const isConventionalCommitTitle = validPrefixes.some(prefix => pr.title.startsWith(prefix));

if (!isConventionalCommitTitle) {
fail(
'Please use a conventional commit title for this PR. See [Conventional Commits and SemVer](https://www.notion.so/primerio/Automating-Version-Bumping-and-Changelog-Creation-c13e32fea11447069dea76f966f4b0fb?pvs=4#c55764aa2f2748eb988d581a456e61e7)'
);
}
// #endregion

// #region ESLint
async function eslint() {
const eslint = new ESLint({
overrideConfigFile: 'eslint.config.mjs',
});
const results = await eslint.lintFiles('.');

let errorCount = 0;
results.forEach(result => {
result.messages.forEach(eslintMessage => {
let actualFilePath = removePrefix(result.filePath, directory + '/');
let errorMessage = `** ESLint **: ${eslintMessage.message} - (${eslintMessage.ruleId})`;
if (eslintMessage.severity === 1) {
errorCount++;
warn(errorMessage, actualFilePath, eslintMessage.line);
} else if (eslintMessage.severity === 2) {
errorCount++;
fail(errorMessage, actualFilePath, eslintMessage.line);
}
});
});

if (errorCount == 0) {
message('✅ No ESLint violations found.');
} else {
fail(`🙁 Found **${errorCount}** ESLint violations.`);
}
}

eslint().catch(error => fail(`❌ ESLint execution failed: ${error.message}`));
// #endregion

const removePrefix = (str: string, prefix: string) => (str.startsWith(prefix) ? str.slice(prefix.length) : str);
Loading
Loading