name: reviewdog
on: [ pull_request ]
jobs:
ktlint:
name: Ktlint Check Code Quality
runs-on: ubuntu-latest
steps:
- name: Clone repo
uses: actions/checkout#main
with:
fetch-depth: 1
- name: ktlint
uses: ScaCap/action-ktlint#master
with:
github_token: ${{ secrets.github_token }}
reporter: github-pr-review
android: true
fail_on_error: true
level: warning
detekt:
name: Check Code Quality
runs-on: ubuntu-latest
steps:
- name: Clone repo
uses: actions/checkout#v2
with:
fetch-depth: 1
ref: ${{ github.head_ref }}
- name: detekt
uses: alaegin/Detekt-Action#v1.22.0
with:
github_token: ${{ secrets.github_token }}
detekt_config: detekt-config.yml # Change config path
And the result
182 kotlin files were analyzed.
Complexity Report:
- 11,105 lines of code (loc)
- 9,579 source lines of code (sloc)
- 6,240 logical lines of code (lloc)
- 223 comment lines of code (cloc)
- 669 cyclomatic complexity (mcc)
- 247 cognitive complexity
- 0 number of total code smells
- 2% comment source ratio
- 107 mcc per 1,000 lloc
- 0 code smells per 1,000 lloc
Project Statistics:
- number of properties: 794
- number of functions: 414
- number of classes: 156
- number of packages: 54
- number of kt files: 182
I can't be 0 code smell. Is there any problem?
And I am curious about detekt-config.yml. Is it generated by reviewdog or is it local file that I created?
Related
I use Github Action to automatically package the Android APK file (same signature file), but when installing to the phone, it prompts: "The signature of the app is inconsistent with the signature of the installed app". Does anyone know how to deal with it? Thank you!
My process configuration:
# This is a basic workflow to help you get started with Actions
name: build
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
push:
branches: [ "main" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build_android:
# The type of runner that the job will run on
runs-on: ubuntu-latest
env:
KEY_JKS: ${{ secrets.KEY_JKS }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }}
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- uses: actions/checkout#v3
- uses: subosito/flutter-action#v2
with:
flutter-version: '3.0.5'
channel: 'stable'
cache: true
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash
cache-path: /Users/runner/hostedtoolcache/flutter/:channel:-:version:-:arch
- name: Flutter action
# You may pin to the exact commit or the version.
uses: subosito/flutter-action#v2.7.0
- name: Create Key File
run: echo $KEY_JKS | base64 -di > android/app/release.jks
# build apk
- uses: actions/checkout#v3
- uses: actions/setup-java#v2
with:
distribution: 'zulu'
java-version: '11'
- uses: subosito/flutter-action#v2
with:
flutter-version: '3.0.5'
- run: flutter pub get
- run: flutter build apk
- uses: actions/upload-artifact#v1
with:
name: app-release.apk
path: build/app/outputs/apk/release/app-release.apk
token: ${{ secrets.GITHUB_TOKEN }}
I have solved this problem.The problem that appeared before, seems to be the cause of the cache.
The steps are as follows:
It mainly includes the modification of the following two lines:
- run: flutter clean
- run: echo $KEY_JKS | base64 -di > android/app/release.jks
Now my process file is like this:
# This is a basic workflow to help you get started with Actions
name: build
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
push:
branches: [ "main" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build_android:
# The type of runner that the job will run on
runs-on: ubuntu-latest
env:
KEY_JKS: ${{ secrets.KEY_JKS }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }}
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- uses: actions/checkout#v3
- uses: subosito/flutter-action#v2
with:
flutter-version: '3.0.5'
channel: 'stable'
cache: true
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash
cache-path: /home/runner/hostedtoolcache/flutter/:channel:-:version:-:arch
- name: Flutter action
uses: subosito/flutter-action#v2.7.0
# build apk
- uses: actions/checkout#v3
- uses: actions/setup-java#v2
with:
distribution: 'zulu'
java-version: '11'
- uses: subosito/flutter-action#v2
with:
flutter-version: '3.0.5'
- run: flutter clean
- run: echo $KEY_JKS | base64 -di > android/app/release.jks
- run: flutter pub get
- run: flutter build apk
- uses: actions/upload-artifact#v1
with:
name: app-release.apk
path: build/app/outputs/apk/release/app-release.apk
token: ${{ secrets.GITHUB_TOKEN }}
build_windows:
runs-on: windows-latest
steps:
- uses: actions/checkout#v3
- uses: subosito/flutter-action#v2
with:
channel: 'beta'
- run: flutter config --enable-windows-desktop
- run: flutter build windows
- uses: actions/upload-artifact#v1
with:
name: windows-build
path: "build/windows/runner/Release"
token: ${{ secrets.GITHUB_TOKEN }}
I created an action that publishes my app apk.
Now im tying to handle version naming on release, but im stuck bc output variable is empty .
The action.yml is:
name: Android CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
apk:
name: Generate the apk file
runs-on: ubuntu-latest
outputs:
version: ${{ steps.getVersion.outputs.version }}
steps:
- uses: actions/checkout#v3
- name: set up JDK 11
uses: actions/setup-java#v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
- name : Upload APK file
uses: actions/upload-artifact#v1
with:
name: apk
path: app/build/outputs/apk/debug/app-debug.apk
- name: Get app version
id: getVersion
run: |
echo "::set-output name=version::$(./gradlew printVersionName)"
release:
name: Release the apk
needs: apk
runs-on: ubuntu-latest
steps:
- name: Download APK from build
uses: actions/download-artifact#v1
with:
name: apk
- name: Create Release
id: create_release
uses: actions/create-release#v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: Release${{ needs.apk.outputs.version }}
release_name: Release ${{ needs.apk.outputs.version }}
- name: Upload Release APK
id: upload_release_asset
uses: actions/upload-release-asset#v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: apk/app-debug.apk
asset_name: takeThatProduct.apk
asset_content_type: application/zip
The step to get version works well, is defined in my build.gradle:
But when i get the output variable in the release job, its empty:
So, the release gets created buy with no version number. New releases fail because the name already exists.
Changed my action using this action: apk-info-action
name: Android CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
apk:
name: Generate the apk file
runs-on: ubuntu-latest
outputs:
version: ${{ steps.getVersion.outputs.version }}
steps:
- uses: actions/checkout#v3
- name: set up JDK 11
uses: actions/setup-java#v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
- name : Upload APK file
uses: actions/upload-artifact#v1
with:
name: apk
path: app/build/outputs/apk/debug/app-debug.apk
- name: Get apk info
id: apk-info
uses: hkusu/apk-info-action#v1
with:
apk-path: app/build/outputs/apk/debug/app-debug.apk
- name: Export apk info
id: getVersion
run: |
echo "::set-output name=version::${{ steps.apk-info.outputs.version-name }}"
release:
name: Release the apk
needs: apk
runs-on: ubuntu-latest
steps:
- name: Download APK from build
uses: actions/download-artifact#v1
with:
name: apk
- name: Create Release
id: create_release
uses: actions/create-release#v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: Release${{ needs.apk.outputs.version }}
release_name: Release ${{ needs.apk.outputs.version }}
- name: Upload Release APK
id: upload_release_asset
uses: actions/upload-release-asset#v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: apk/app-debug.apk
asset_name: takeThatProduct.apk
asset_content_type: application/zip
I am trying to upload an APK file to Slack using Github. My code somehow works adding a text but it doesn't really upload the actual apk file. I am building the apk file using Flutter. All I want to do is uploading an apk file and it would be also great to send a chat notification too.. but seems chat notifcation is completed but not working for uploading a file.
Thanks for your help in advance!
name: APK Deploy
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
# Setup Java environment in order to build the Android app.
- uses: actions/checkout#v1
- uses: actions/setup-java#v1
with:
java-version: '12.x'
# Setup the flutter environment.
- uses: subosito/flutter-action#v1
with:
channel: 'stable' # 'dev', 'alpha', default to: 'stable'
# flutter-version: '1.12.x' # you can also specify exact version of flutter
# Get flutter dependencies.
- run: flutter pub get
# Statically analyze the Dart code for any errors.
- run: flutter analyze .
# Run widget tests for our flutter project.
- run: flutter test
# Build apk.
- run: flutter build apk --release
- run: 'echo build/app/outputs/apk/release/app-release.apk > app-release.apk'
- uses: MeilCli/slack-upload-file#v1
with:
slack_token: ${{ secrets.SLACK_READ_WRITE_TOKEN }}
channels: ${{ secrets.SLACK_CHANNEL_DEPLOY }}
file_path: 'build/app/outputs/apk/release/app-release.apk'
file_name: 'app-release.apk'
file_type: 'apk'
initial_comment: '${{ github.ref }} - deployed the apk file to slack'
- name: action-slack
uses: 8398a7/action-slack#v3.8.0
with:
status: ${{ job.status }}
author_name: Build Notification
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
# Upload generated apk to the artifacts.
- name: release-apk
uses: actions/upload-artifact#v2
with:
name: app-release.apk
path: build/app/outputs/apk/release/app-release.apk
Looks like your issue might be in your path for the release-apk step. Might be worth changing it to this:
path: ${{ github.workspace }}/app/actions_builds/app-release.apk
I created GitHub actions to run to build apk on macOS. but it gives me warning that Artifact pattern :build/app/outputs/apk/release/*.apk did not match any files.
This is a public repo, can someone please help me here. in official docs it says the same path and locally i can build apk successfully (on windows machine).
I used MacOS to generate iOs App which i'll do later.
Link of repo.
magento-mobile-oss
workflow-
name: Magento Mobile
on:
push:
branches: [ oss ]
pull_request:
branches: [ oss ]
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout#v1
- uses: actions/setup-java#v1
with:
java-version: '12.x'
- uses: subosito/flutter-action#v1
with:
channel: stable
env:
KEY_JKS: ${{ secrets.KEY_JKS }}
KEY_PASSWORD: ${{ secrets.ALIAS_PASSWORD }}
ALIAS_PASSWORD: ${{ secrets.KEY_PASSWORD }}
run: echo $KEY_JKS > key.jks && flutter pub get && flutter test && flutter build apk --split-per-abi --verbose
- name: Create a Release APK
uses: ncipollo/release-action#v1
with:
artifacts: "build/app/outputs/apk/release/*.apk"
token: ${{ secrets.OSS_TOKEN }}
commit: oss
tag: v1.0.${{ github.run_number }}
Your workflow doesn't build the APK, and therefore, there's no build/app/outputs/apk/release/*.apk file. So the release action doesn't find the location of the artifacts. Here is the workflow you can use to modify yours and tweak it as you wish:
# This is a basic workflow to help you get started with Actions
name: Build Flutter APK
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "develop" branch
push:
branches: ["develop"]
tags:
- "v*"
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
permissions:
contents: write
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- uses: actions/checkout#v3
- uses: actions/setup-java#v1
with:
java-version: "12.x"
- name: Setup Flutter
uses: subosito/flutter-action#v1
with:
channel: "beta"
- name: Decode android/neumodore_key.jks
run: echo "${{ secrets.KEYSTORE_JKS_PROD }}" | base64 --decode > android/keystore.jks
- name: Decode android/key.properties
run: echo "${{ secrets.KEY_PROPERTIES_PROD }}" | base64 --decode > android/key.properties
- name: Pub Get Packages
run: flutter pub get
- name: Build APK
run: flutter build apk
- name: Create Release
uses: ncipollo/release-action#v1.10.0
with:
artifacts: "build/app/outputs/apk/release/*.apk"
So im trying to implement a release section on my yml file for a generated artifact, explaining myself: i would like to add an artifact to my releases with my yml file.
Here's the only yml file am working on for an android app:
name: Android CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout#v2
- run: mkdir -p app/build/outputs/apk/release
- run: echo hello > app/build/outputs/apk/release/app-release-unsigned.apk
- uses: actions/upload-artifact#v2
with:
name: my-artifact
path: app/build/outputs/apk/release/app-release-unsigned.apk
- name: set up JDK 1.8
uses: actions/setup-java#v1
with:
java-version: 1.8
- name: Permition Gradlew
run: chmod +x gradlew
- name: Build Gradlew
run: ./gradlew assembleRelease
The actions/upload-artifact#v2 Action is meant for uploading artifacts to GitHub Actions workflow runs, not for adding assets to a GitHub release. If you want to add build assets to a GitHub release, you should instead use the softprops/action-gh-release example described here. I've modified the example to match your specific scenario:
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
name: Upload Release Asset
jobs:
build:
name: Upload Release Asset
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout#v2
- name: Build project
run: |
mkdir -p app/build/outputs/apk/release
echo hello > app/build/outputs/apk/release/app-release-unsigned.apk
- name: Release with Notes
uses: softprops/action-gh-release#v1
with:
files: app/build/outputs/apk/release/app-release-unsigned.apk
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
You can repeat the final step as needed with different paths for adding further artifacts to the release.