fix: resolve CI failures — RetentionService bean, frontend types, artifact upload
CI — Build, Lint & Security Scan / backend (push) Failing after 1m24s
CI — Build, Lint & Security Scan / frontend (push) Failing after 48s
CI — Build, Lint & Security Scan / image-scan (push) Has been skipped
CI — Build, Lint & Security Scan / secrets-scan (push) Failing after 27s
Deploy to TrueNAS / deploy (push) Successful in 3m0s

- Remove @ConditionalOnProperty from RetentionService class; guard only @Scheduled method
- Fix QuotaStatus property references in frontend tests
- Downgrade upload-artifact to v3 for Gitea compatibility
This commit is contained in:
Patrick Plate
2026-06-19 16:23:18 +02:00
parent 51a9d1db58
commit 53931d9d2b
5 changed files with 17 additions and 11 deletions
+3 -3
View File
@@ -65,7 +65,7 @@ jobs:
- name: Upload dependency-check report - name: Upload dependency-check report
if: always() if: always()
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v3
with: with:
name: dependency-check-report name: dependency-check-report
path: target/dependency-check-report.* path: target/dependency-check-report.*
@@ -159,7 +159,7 @@ jobs:
- name: Upload Trivy reports - name: Upload Trivy reports
if: always() if: always()
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v3
with: with:
name: trivy-reports name: trivy-reports
path: trivy-*.json path: trivy-*.json
@@ -189,7 +189,7 @@ jobs:
- name: Upload Gitleaks report - name: Upload Gitleaks report
if: always() if: always()
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v3
with: with:
name: gitleaks-report name: gitleaks-report
path: gitleaks-report.json path: gitleaks-report.json
@@ -98,11 +98,11 @@ export const mockStaffList = [
] ]
export const mockQuotaStatus = { export const mockQuotaStatus = {
memberId: "m1", dailyUsedGrams: 15,
dailyLimitGrams: 25,
monthlyUsedGrams: 15,
monthlyLimitGrams: 50, monthlyLimitGrams: 50,
usedGrams: 15, isUnder21: false,
remainingGrams: 35,
distributionCount: 3,
} }
export const mockRecentDistributions = [ export const mockRecentDistributions = [
@@ -62,7 +62,7 @@ describe("useQuotaQuery", () => {
await waitFor(() => expect(result.current.isSuccess).toBe(true)) await waitFor(() => expect(result.current.isSuccess).toBe(true))
expect(result.current.data).toEqual(mockQuotaStatus) expect(result.current.data).toEqual(mockQuotaStatus)
expect(result.current.data?.monthlyLimitGrams).toBe(50) expect(result.current.data?.monthlyLimitGrams).toBe(50)
expect(result.current.data?.usedGrams).toBe(15) expect(result.current.data?.dailyUsedGrams).toBe(15)
}) })
it("is disabled when memberId is empty", async () => { it("is disabled when memberId is empty", async () => {
@@ -91,7 +91,7 @@ describe("useMemberQuotaQuery", () => {
await waitFor(() => expect(result.current.isSuccess).toBe(true)) await waitFor(() => expect(result.current.isSuccess).toBe(true))
expect(result.current.data).toEqual(mockQuotaStatus) expect(result.current.data).toEqual(mockQuotaStatus)
expect(result.current.data?.remainingGrams).toBe(35) expect(result.current.data?.monthlyUsedGrams).toBe(15)
}) })
}) })
@@ -9,7 +9,7 @@ import de.cannamanage.service.repository.DistributionRepository;
import de.cannamanage.service.repository.MemberRepository; import de.cannamanage.service.repository.MemberRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -29,9 +29,11 @@ import java.util.*;
@Slf4j @Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@ConditionalOnProperty(name = "cannamanage.schedulers.enabled", havingValue = "true", matchIfMissing = false)
public class RetentionService { public class RetentionService {
@Value("${cannamanage.schedulers.enabled:false}")
private boolean schedulersEnabled;
private final ClubRepository clubRepository; private final ClubRepository clubRepository;
private final MemberRepository memberRepository; private final MemberRepository memberRepository;
private final DistributionRepository distributionRepository; private final DistributionRepository distributionRepository;
@@ -39,11 +41,15 @@ public class RetentionService {
/** /**
* Daily scheduled retention processing at 2:00 AM. * Daily scheduled retention processing at 2:00 AM.
* Only runs when schedulers are enabled.
* Processes each club independently. * Processes each club independently.
*/ */
@Scheduled(cron = "0 0 2 * * *") @Scheduled(cron = "0 0 2 * * *")
@Transactional @Transactional
public void processRetention() { public void processRetention() {
if (!schedulersEnabled) {
return;
}
log.info("Starting scheduled retention processing"); log.info("Starting scheduled retention processing");
List<Club> clubs = clubRepository.findAll(); List<Club> clubs = clubRepository.findAll();
int totalAnonymized = 0; int totalAnonymized = 0;