Skip to content

Commit

Permalink
build: added SonarQube configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
skyecodes committed Mar 13, 2024
1 parent 09708f5 commit 30091b2
Show file tree
Hide file tree
Showing 20 changed files with 346 additions and 285 deletions.
38 changes: 38 additions & 0 deletions .github/workflows/analyze.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Build & Analyze app

on:
push:
branches:
- master


jobs:
build:
name: Build
runs-on: ubuntu-latest
permissions: read-all
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Cache SonarQube packages
uses: actions/cache@v1
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Cache Gradle packages
uses: actions/cache@v1
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: ${{ runner.os }}-gradle
- name: Build and analyze
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
run: ./gradlew build sonar --info
7 changes: 4 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@ name: Build & Release app

on:
workflow_dispatch:
push:
branches:
- master

jobs:
build:
Expand All @@ -29,6 +26,10 @@ jobs:
- name: Build packages
id: build
run: ./gradlew packageReleaseDistributionForCurrentOS --no-daemon
env:
CURSEFORGE_API_KEY: ${{ secrets.CURSEFORGE_API_KEY }}
MODRINTH_API_KEY: ${{ secrets.MODRINTH_API_KEY }}
MICROSOFT_CLIENT_ID: ${{ secrets.MICROSOFT_CLIENT_ID }}
continue-on-error: true

- name: Check errors
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/kotlin/app/vercors/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ fun main() {
val lifecycle = LifecycleRegistry()
val windowState = rememberWindowState(size = DpSize(1280.dp, 720.dp))
LifecycleController(lifecycle, windowState)
val di = appDI(properties, coroutineScope)
val di = AppDI(properties, coroutineScope)
CompositionLocalProvider(LocalDI provides di) {
val componentContext = inject<AppComponentContext>(DefaultComponentContext(lifecycle), di)
val rootComponent = inject<RootComponent>(componentContext, ::onClose)
Expand Down
1 change: 0 additions & 1 deletion app/src/main/kotlin/app/vercors/common/SelectIconChip.kt
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ fun SelectIconChip(
}
}

@OptIn(ExperimentalMaterialApi::class)
@Composable
fun SelectIconChip(
selected: Boolean,
Expand Down
125 changes: 17 additions & 108 deletions app/src/main/kotlin/app/vercors/home/HomeInstancesSectionContent.kt
Original file line number Diff line number Diff line change
@@ -1,41 +1,29 @@
package app.vercors.home

import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.hoverable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsHoveredAsState
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.pointer.PointerIcon
import androidx.compose.ui.input.pointer.pointerHoverIcon
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import app.vercors.LocalPalette
import app.vercors.UI
import app.vercors.common.AppAnimatedVisibility
import app.vercors.instance.InstanceCardContent
import app.vercors.instance.InstanceData
import app.vercors.instance.lastPlayedString
import app.vercors.instance.loaderAndVersionString
import compose.icons.FeatherIcons
import compose.icons.feathericons.Box
import compose.icons.feathericons.Play
import kotlin.math.roundToInt

@Composable
fun HomeInstancesSectionContent(
instances: List<InstanceData>?,
onInstanceClick: (InstanceData) -> Unit,
onInstanceLaunchClick: (InstanceData) -> Unit
onInstanceLaunchClick: (InstanceData) -> Unit,
) {
var count by rememberSaveable { mutableStateOf(0) }
val localDensity = LocalDensity.current
Expand All @@ -48,7 +36,12 @@ fun HomeInstancesSectionContent(
) {
if (instances?.isNotEmpty() == true) {
for (instance in instances.take(count)) {
InstanceCardContent(instance, onInstanceClick, onInstanceLaunchClick)
InstanceCardContent(
instance = instance,
onInstanceClick = onInstanceClick,
onInstanceLaunchClick = onInstanceLaunchClick,
modifier = Modifier.weight(1f)
)
}
for (i in instances.size until count) {
Spacer(Modifier.weight(1f))
Expand All @@ -58,87 +51,3 @@ fun HomeInstancesSectionContent(
}
}
}

@Composable
private fun RowScope.InstanceCardContent(
instance: InstanceData,
onInstanceClick: (InstanceData) -> Unit,
onInstanceLaunchClick: (InstanceData) -> Unit
) {
val interactionSource = remember { MutableInteractionSource() }
val isHovered by interactionSource.collectIsHoveredAsState()

Card(
modifier = Modifier.weight(1f).hoverable(interactionSource)
.pointerHoverIcon(PointerIcon.Hand).clickable { onInstanceClick(instance) }
) {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(UI.largePadding),
modifier = Modifier.padding(UI.largePadding)
) {
Box(Modifier.fillMaxWidth().aspectRatio(1f)) {
Surface(
color = LocalPalette.current.surface2,
modifier = Modifier.fillMaxSize(),
shape = UI.defaultRoundedCornerShape,
elevation = 1.dp
) {
Icon(FeatherIcons.Box, null, Modifier.fillMaxSize())
}
AppAnimatedVisibility(
visible = isHovered,
enter = fadeIn(),
exit = fadeOut()
) {
Box(
modifier = Modifier.fillMaxSize().background(UI.darker),
contentAlignment = Alignment.Center
) {
IconButton(
onClick = { onInstanceLaunchClick(instance) },
modifier = Modifier.size(64.dp).background(MaterialTheme.colors.primary, CircleShape),
content = {
Icon(
FeatherIcons.Play,
"Play",
Modifier.size(32.dp),
MaterialTheme.colors.onPrimary
)
}
)
}
}
}
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(UI.mediumPadding, Alignment.CenterVertically),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = instance.name,
style = MaterialTheme.typography.h6,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = instance.loaderAndVersionString,
style = MaterialTheme.typography.subtitle2,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
Text(
text = instance.lastPlayedString,
style = MaterialTheme.typography.subtitle2,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
}
}
}
}
147 changes: 147 additions & 0 deletions app/src/main/kotlin/app/vercors/instance/InstanceCardContent.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
package app.vercors.instance

import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.hoverable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsHoveredAsState
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.pointer.PointerIcon
import androidx.compose.ui.input.pointer.pointerHoverIcon
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import app.vercors.LocalPalette
import app.vercors.UI
import app.vercors.common.AppAnimatedVisibility
import compose.icons.FeatherIcons
import compose.icons.feathericons.Box
import compose.icons.feathericons.Play

@Composable
fun InstanceCardContent(
instance: InstanceData,
onInstanceClick: (InstanceData) -> Unit,
onInstanceLaunchClick: (InstanceData) -> Unit,
modifier: Modifier = Modifier
) {
val interactionSource = remember { MutableInteractionSource() }
val isHovered by interactionSource.collectIsHoveredAsState()

Card(
modifier = modifier.hoverable(interactionSource)
.pointerHoverIcon(PointerIcon.Hand).clickable { onInstanceClick(instance) }
) {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(UI.largePadding),
modifier = Modifier.padding(UI.largePadding)
) {
Box(Modifier.fillMaxWidth().aspectRatio(1f)) {
Surface(
color = LocalPalette.current.surface2,
modifier = Modifier.fillMaxSize(),
shape = UI.defaultRoundedCornerShape,
elevation = 1.dp
) {
Icon(FeatherIcons.Box, null, Modifier.fillMaxSize())
}

when (instance.status) {
is InstanceStatus.Errored -> {

}

is InstanceStatus.Launching -> {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
val animatedProgress by animateFloatAsState(
targetValue = (instance.status as InstanceStatus.Launching).progress,
animationSpec = tween(500)
)

CircularProgressIndicator(
progress = animatedProgress,
modifier = Modifier.size(64.dp)
)
}
}

InstanceStatus.Running -> {

}

InstanceStatus.Stopped -> {
AppAnimatedVisibility(
visible = isHovered,
enter = fadeIn(),
exit = fadeOut()
) {
Box(
modifier = Modifier.fillMaxSize().background(UI.darker),
contentAlignment = Alignment.Center
) {
IconButton(
onClick = { onInstanceLaunchClick(instance) },
modifier = Modifier.size(64.dp)
.background(MaterialTheme.colors.primary, CircleShape),
content = {
Icon(
FeatherIcons.Play,
"Play",
Modifier.size(32.dp),
MaterialTheme.colors.onPrimary
)
}
)
}
}
}
}


}
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(UI.mediumPadding, Alignment.CenterVertically),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = instance.name,
style = MaterialTheme.typography.h6,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = instance.loaderAndVersionString,
style = MaterialTheme.typography.subtitle2,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
Text(
text = instance.lastPlayedString,
style = MaterialTheme.typography.subtitle2,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
}
}
}
}
Loading

0 comments on commit 30091b2

Please sign in to comment.