diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 49ca3671..0616f641 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,11 +3,36 @@ registries: dockerhub: type: docker-registry url: https://registry.hub.docker.com - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_TOKEN }} + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_TOKEN }} replaces-base: true updates: + - package-ecosystem: "gradle" + directory: "/" + assignees: + - "Rakambda" + schedule: + interval: "daily" + time: "05:00" + timezone: "Europe/Paris" + pull-request-branch-name: + separator: "-" + groups: + log4j: + patterns: + - "org.apache.logging.log4j:log4j-core" + - "org.apache.logging.log4j:log4j-slf4j2-impl" + google-apis: + patterns: + - "com.google.api-client:google-api-client" + - "com.google.oauth-client:google-oauth-client-jetty" + - "com.google.apis:google-api-services-gmail" + - "com.google.apis:google-api-services-calendar" + # Disable while paths can't be ignored as it'd update all 'auto-approve-sync-files.yml', Renovate will handle exclusion + # - <<: *defaults + # package-ecosystem: "github-actions" + # directory: "/" - package-ecosystem: "docker" directory: "/" assignees: @@ -20,3 +45,52 @@ updates: separator: "-" registries: - dockerhub + - package-ecosystem: "maven" + directory: "/" + assignees: + - "Rakambda" + schedule: + interval: "daily" + time: "05:00" + timezone: "Europe/Paris" + pull-request-branch-name: + separator: "-" + - package-ecosystem: "npm" + directory: "/" + assignees: + - "Rakambda" + schedule: + interval: "daily" + time: "05:00" + timezone: "Europe/Paris" + pull-request-branch-name: + separator: "-" + - package-ecosystem: "nuget" + directory: "/" + assignees: + - "Rakambda" + schedule: + interval: "daily" + time: "05:00" + timezone: "Europe/Paris" + pull-request-branch-name: + separator: "-" + groups: + restsharp: + patterns: + - "restsharp" + - "restsharp.*" + opencvsharp4: + patterns: + - "opencvsharp4" + - "opencvsharp4.*" + - package-ecosystem: "pip" + directory: "/" + assignees: + - "Rakambda" + schedule: + interval: "daily" + time: "05:00" + timezone: "Europe/Paris" + pull-request-branch-name: + separator: "-" diff --git a/.github/renovate.json b/.github/renovate.json index 1ee87bd0..8a1677ea 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -10,12 +10,7 @@ "type: \uD83D\uDCDA dependencies" ], "enabledManagers" : [ - "dockerfile", - "maven", - "nuget", - "pip_requirements", "github-actions", - "gradle", "gradle-wrapper", "cargo" ], diff --git a/.github/workflows/analyse.yml b/.github/workflows/analyse.yml deleted file mode 100644 index d2e9528d..00000000 --- a/.github/workflows/analyse.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Analyse - -on: - push: - branches: - - main - - develop - pull_request: - branches: - - main - - develop - schedule: - - cron: '0 13 * * 1' - -permissions: - security-events: write - actions: read - contents: read - -jobs: - code-ql: - name: CodeQL - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Setup Java JDK - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: ${{ vars.JAVA_VERSION }} - - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: java - - name: Autobuild - uses: github/codeql-action/autobuild@v3 - env: - GITHUB_USER: RakSrinaNa - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 - diff --git a/.github/workflows/build-test-deploy.yml b/.github/workflows/build-test-deploy.yml index 12cedd9d..0ef45e3e 100644 --- a/.github/workflows/build-test-deploy.yml +++ b/.github/workflows/build-test-deploy.yml @@ -27,7 +27,7 @@ jobs: distribution: 'temurin' java-version: ${{ vars.JAVA_VERSION }} - name: Generate and submit dependency graph - uses: gradle/actions/dependency-submission@v4.1.0 + uses: gradle/actions/dependency-submission@v4.2.0 continue-on-error: true build: @@ -45,7 +45,7 @@ jobs: java-version: ${{ vars.JAVA_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4.1.0 + uses: gradle/actions/setup-gradle@v4.2.0 - name: Build project run: | ./gradlew \ @@ -86,7 +86,7 @@ jobs: distribution: 'temurin' java-version: ${{ vars.JAVA_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4.1.0 + uses: gradle/actions/setup-gradle@v4.2.0 - name: Run tests run: | @@ -105,7 +105,7 @@ jobs: with: report_paths: 'miner/build/test-results/test/*.xml' - name: Publish coverage on CodeCov - uses: codecov/codecov-action@v4.6.0 + uses: codecov/codecov-action@v5.0.2 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -150,7 +150,7 @@ jobs: distribution: 'temurin' java-version: ${{ vars.JAVA_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4.1.0 + uses: gradle/actions/setup-gradle@v4.2.0 - name: Run tests run: | @@ -169,7 +169,7 @@ jobs: with: report_paths: 'viewer/build/test-results/test/*.xml' - name: Publish coverage on CodeCov - uses: codecov/codecov-action@v4.6.0 + uses: codecov/codecov-action@v5.0.2 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -214,7 +214,7 @@ jobs: distribution: 'temurin' java-version: ${{ vars.JAVA_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4.1.0 + uses: gradle/actions/setup-gradle@v4.2.0 - name: Calculate miner image name id: miner-image-name @@ -244,7 +244,7 @@ jobs: distribution: 'temurin' java-version: ${{ vars.JAVA_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4.1.0 + uses: gradle/actions/setup-gradle@v4.2.0 - name: Calculate viewer image name id: viewer-image-name diff --git a/.github/workflows/manual-docker.yml b/.github/workflows/manual-docker.yml index c8423e63..1cd45691 100644 --- a/.github/workflows/manual-docker.yml +++ b/.github/workflows/manual-docker.yml @@ -17,7 +17,7 @@ jobs: distribution: 'temurin' java-version: ${{ vars.JAVA_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4.1.0 + uses: gradle/actions/setup-gradle@v4.2.0 - name: Calculate miner image name id: miner-image-name @@ -53,7 +53,7 @@ jobs: distribution: 'temurin' java-version: ${{ vars.JAVA_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4.1.0 + uses: gradle/actions/setup-gradle@v4.2.0 - name: Calculate viewer image name id: viewer-image-name diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 66cfea56..6f3b97e0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: distribution: 'temurin' java-version: ${{ vars.JAVA_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4.1.0 + uses: gradle/actions/setup-gradle@v4.2.0 - name: Push latest on Docker Hub run: | @@ -42,7 +42,7 @@ jobs: distribution: 'temurin' java-version: ${{ vars.JAVA_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4.1.0 + uses: gradle/actions/setup-gradle@v4.2.0 - name: Push latest on Docker Hub run: | @@ -66,14 +66,14 @@ jobs: distribution: 'temurin' java-version: ${{ vars.JAVA_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4.1.0 + uses: gradle/actions/setup-gradle@v4.2.0 - name: Build project run: | ./gradlew \ assemble - name: Release - uses: softprops/action-gh-release@v2.0.8 + uses: softprops/action-gh-release@v2.1.0 with: fail_on_unmatched_files: false generate_release_notes: true diff --git a/gradle.properties b/gradle.properties index 50169955..263cfaeb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -version=2.3.3 +version=2.3.4 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 72d67a04..6db2c2ea 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,37 +1,37 @@ [versions] slf4j-version = "2.0.16" log4j2-version = "2.24.1" -unirest-version = "4.4.4" +unirest-version = "4.4.5" picocli-version = "4.7.6" -jackson-version = "2.18.0" -jsonschema-generator-version = "4.36.0" +jackson-version = "2.18.1" +jsonschema-generator-version = "4.37.0" httpclient-version = "4.5.14" lang3-version = "3.17.0" commons-text-version = "1.12.0" -jetbrains-annotations-version = "25.0.0" +jetbrains-annotations-version = "26.0.1" websocket-version = "1.5.7" -junitVersion = "5.11.1" +junitVersion = "5.11.3" assertj-core-version = "3.26.3" assertj-db-version = "2.0.2" -mockito-version = "5.14.1" +mockito-version = "5.14.2" awaitility-version = "4.2.2" -json-unit-version = "3.4.1" +json-unit-version = "4.0.0" kitteh-irc-version = "9.0.0" -hikari-cp-version = "6.0.0" -mariadb-version = "3.4.1" -sqlite-version = "3.46.1.3" -mysql-version = "9.0.0" +hikari-cp-version = "6.2.0" +mariadb-version = "3.5.0" +sqlite-version = "3.47.0.0" +mysql-version = "9.1.0" rerunner-jupiter-version = "2.1.6" -flyway-version = "10.18.2" +flyway-version = "10.21.0" selenide-version = "7.5.1" -lombok-version = "1.18.34" +lombok-version = "1.18.36" jacocoVersion = "0.8.12" shadow-version = "8.1.1" names-version = "0.51.0" -jib-version = "3.4.3" +jib-version = "3.4.4" git-properties-version = "2.4.2" -springboot-version = "3.3.4" +springboot-version = "3.3.5" springboot-dependencies-version = "1.1.6" test-logger-version = "4.0.0" git-version-plugin-version = "3.1.0" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df97d72b..94113f20 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/miner/src/main/java/fr/rakambda/channelpointsminer/miner/api/gql/gql/data/types/DropCampaignSummary.java b/miner/src/main/java/fr/rakambda/channelpointsminer/miner/api/gql/gql/data/types/DropCampaignSummary.java index 27172295..fbabbdc0 100644 --- a/miner/src/main/java/fr/rakambda/channelpointsminer/miner/api/gql/gql/data/types/DropCampaignSummary.java +++ b/miner/src/main/java/fr/rakambda/channelpointsminer/miner/api/gql/gql/data/types/DropCampaignSummary.java @@ -19,4 +19,8 @@ public class DropCampaignSummary extends GQLType{ @JsonProperty("includesSubRequirement") private boolean includesSubRequirement; + @JsonProperty("isPermanentlyDismissible") + private boolean permanentlyDismissible; + @JsonProperty("isSitewide") + private boolean sitewide; } diff --git a/miner/src/main/java/fr/rakambda/channelpointsminer/miner/runnable/UpdateStreamInfo.java b/miner/src/main/java/fr/rakambda/channelpointsminer/miner/runnable/UpdateStreamInfo.java index 597a0b1a..d333e8d5 100644 --- a/miner/src/main/java/fr/rakambda/channelpointsminer/miner/runnable/UpdateStreamInfo.java +++ b/miner/src/main/java/fr/rakambda/channelpointsminer/miner/runnable/UpdateStreamInfo.java @@ -18,13 +18,10 @@ import java.util.Collection; import java.util.Objects; import java.util.Optional; -import java.util.Set; @Log4j2 @RequiredArgsConstructor public class UpdateStreamInfo implements Runnable{ - private static final Collection DISMISSIBLE_CAMPAIGNS = Set.of("dc4ff0b4-4de0-11ef-9ec3-621fb0811846"); - @NotNull private final IMiner miner; @@ -151,7 +148,7 @@ private void updateCampaigns(@NotNull Streamer streamer){ .map(DropsHighlightServiceAvailableDropsData::getChannel) .map(Channel::getViewerDropCampaigns) .flatMap(Collection::stream) - .filter(dropCampaign -> DISMISSIBLE_CAMPAIGNS.contains(dropCampaign.getId())) + .filter(this::isDismissibleGlobalCompaign) .forEach(dropCampaign -> dismissCampaign(miner, streamer, dropCampaign)); } } @@ -160,6 +157,12 @@ private void updateCampaigns(@NotNull Streamer streamer){ } } + private boolean isDismissibleGlobalCompaign(@NotNull DropCampaign dropCampaign){ + return Optional.ofNullable(dropCampaign.getSummary()) + .map(summary -> summary.isSitewide() && summary.isPermanentlyDismissible()) + .orElse(false); + } + private void dismissCampaign(@NotNull IMiner miner, @NotNull Streamer streamer, @NotNull DropCampaign dropCampaign){ var result = miner.getGqlApi().setDropsCommunityHighlightToHidden(streamer.getId(), dropCampaign.getId()); var isHidden = result diff --git a/miner/src/test/java/fr/rakambda/channelpointsminer/miner/api/gql/gql/GQLApiDropsHighlightServiceAvailableDropsTest.java b/miner/src/test/java/fr/rakambda/channelpointsminer/miner/api/gql/gql/GQLApiDropsHighlightServiceAvailableDropsTest.java index 423b2517..105adbc2 100644 --- a/miner/src/test/java/fr/rakambda/channelpointsminer/miner/api/gql/gql/GQLApiDropsHighlightServiceAvailableDropsTest.java +++ b/miner/src/test/java/fr/rakambda/channelpointsminer/miner/api/gql/gql/GQLApiDropsHighlightServiceAvailableDropsTest.java @@ -55,6 +55,8 @@ void nominalWithDrops(UnirestMock unirest){ .build())) .build())) .summary(DropCampaignSummary.builder() + .sitewide(true) + .permanentlyDismissible(true) .includesSubRequirement(true) .build()) .build())) diff --git a/miner/src/test/java/fr/rakambda/channelpointsminer/miner/runnable/UpdateStreamInfoTest.java b/miner/src/test/java/fr/rakambda/channelpointsminer/miner/runnable/UpdateStreamInfoTest.java index 65ddc171..c7cd6faa 100644 --- a/miner/src/test/java/fr/rakambda/channelpointsminer/miner/runnable/UpdateStreamInfoTest.java +++ b/miner/src/test/java/fr/rakambda/channelpointsminer/miner/runnable/UpdateStreamInfoTest.java @@ -9,6 +9,7 @@ import fr.rakambda.channelpointsminer.miner.api.gql.gql.data.types.Channel; import fr.rakambda.channelpointsminer.miner.api.gql.gql.data.types.ChatRoomBanStatus; import fr.rakambda.channelpointsminer.miner.api.gql.gql.data.types.DropCampaign; +import fr.rakambda.channelpointsminer.miner.api.gql.gql.data.types.DropCampaignSummary; import fr.rakambda.channelpointsminer.miner.api.gql.gql.data.types.StreamPlaybackAccessToken; import fr.rakambda.channelpointsminer.miner.api.gql.gql.data.types.User; import fr.rakambda.channelpointsminer.miner.api.gql.gql.data.videoplayerstreaminfooverlaychannel.VideoPlayerStreamInfoOverlayChannelData; @@ -91,6 +92,8 @@ class UpdateStreamInfoTest{ private Channel channel; @Mock private DropCampaign dropCampaign; + @Mock + private DropCampaignSummary dropCampaignSummary; private URL spadeUrl; private URL m3u8Url; @@ -444,6 +447,10 @@ void updateWithDataStreamingUpdateCampaignDismissibleAndSettingActivated(){ when(gqlApi.dropsHighlightServiceAvailableDrops(STREAMER_ID)).thenReturn(Optional.of(dropsHighlightServiceAvailableDrops)); when(gqlApi.chatRoomBanStatus(STREAMER_ID, ACCOUNT_ID)).thenReturn(Optional.of(gqlResponseChatRoomBanStatus)); + when(dropCampaign.getSummary()).thenReturn(dropCampaignSummary); + when(dropCampaignSummary.isSitewide()).thenReturn(true); + when(dropCampaignSummary.isPermanentlyDismissible()).thenReturn(true); + assertDoesNotThrow(() -> tested.run()); verify(gqlApi).videoPlayerStreamInfoOverlayChannel(STREAMER_USERNAME); diff --git a/miner/src/test/resources/api/gql/gql/dropsHighlightServiceAvailableDrops_withDrops.json b/miner/src/test/resources/api/gql/gql/dropsHighlightServiceAvailableDrops_withDrops.json index 5d2bc757..c1027aeb 100644 --- a/miner/src/test/resources/api/gql/gql/dropsHighlightServiceAvailableDrops_withDrops.json +++ b/miner/src/test/resources/api/gql/gql/dropsHighlightServiceAvailableDrops_withDrops.json @@ -43,6 +43,8 @@ } ], "summary": { + "isPermanentlyDismissible": true, + "isSitewide": true, "includesSubRequirement": true, "__typename": "DropCampaignSummary" },