Skip to main content
Teams+

Codemagic Workflow

First, make sure you app is added and enabled in Codemagic CI/CD by integrating with your repository.

Then, you have two options to write your steps for the build pipeline in Codemagic, either use the "Workflow Editor" or you can switch to codemagic.yaml file.

|---lib
|---analysis_options.yaml
|---pubspec.yaml
|---codemagic.yaml

In this doc, we will cover both modes.

Codemagic Editor or Yaml

Configuring Access to DCM Step​

First, you need to define environment variables, DCM_EMAIL and DCM_KEY.

Setup Environment Variables​

In Codemagic, you can navigate to your app settings, then to the Environment variables tab and then add both variables. Then, group the variables under dcm_credentials and make sure the Secure option is enabled.

environment:
groups:
- dcm_credentials

YAML Environment Step

Installing DCM Step​

Codemagic can have different build machine including macOS, Linux and Windows.

Codemagic Build runners

To install the the DCM on Codemagic, depending on the build machine that you are using, follow the installation step.

For example, for macOS build machines,

Codemagic macOs

you can use brew as below right before all other steps. Ensure that you also install flutter pub packages.

scripts:
- name: Install DCM
script: |
brew tap CQLabs/dcm
export HOMEBREW_NO_AUTO_UPDATE=1
brew install dcm
- name: Install flutter packages
script: flutter pub get
- name: Confirm DCM
script: dcm --version

Read more about different DCM installation on Windows, macOS and Linux.

Run DCM Step​

It's up to you when to run DCM analyze command to generate the code quality report whether pre-test or post-test or pre-build, however, we recommend you run and generate report as early as possible as it is good idea to run quick steps before slower steps to save up CI/CD minutes and get faster feedback on CI. Therefore, we will add "Run DCM Analysis" right after all dependencies are set and before every other steps.

  - name: Running DCM Analysis...
script: dcm analyze --ci-key=$DCM_KEY --email=$DCM_EMAIL lib --reporter=console

After this setup and combing with your own steps, you are ready to start building and testing.

Codemagic build

DCM Report Artifacts​

In case you need to download the DCM report from Codemagic, you can generate preferable format for example Markdown, JSON or XML and download if needed.

You can do that with codemagic.yaml as follow:

      - name: Running DCM Analysis
script: |
echo "Running DCM Analysis..."

# Run DCM analysis, capture exit code and error message
DCM_OUTPUT=$(dcm analyze --ci-key=$DCM_KEY --email=$DCM_EMAIL lib --no-congratulate --reporter=console 2>&1)
DCM_EXIT_CODE=$?

# If analysis fails, create an error summary
if [ "$DCM_EXIT_CODE" -ne 0 ]; then
echo "DCM Analysis failed with exit code $DCM_EXIT_CODE."
echo "Error Message: $DCM_OUTPUT"

# Write error summary to a markdown file
cat <<EOF > dcm_error_summary.md
# DCM Analysis Failed

DCM Analysis failed with exit code $DCM_EXIT_CODE.

## Error Message
\`\`\`
$DCM_OUTPUT
\`\`\`
EOF

# Copy the error summary to the export directory
cp dcm_error_summary.md "$CM_EXPORT_DIR/dcm_error_summary.md"

# Exit the script with the DCM exit code to mark the CI/CD step as failed
exit $DCM_EXIT_CODE
fi

# Optionally add test scripts here if needed, for example:
- name: Run Flutter Tests
script: flutter test

artifacts:
- dcm_error_summary.md # Collect any error summary if generated

Codemagic build artifacts

Full Script​

Here is the final steps and script for codemagic.yaml file.

workflows:
flutter-workflow:
name: Flutter Code Quality
triggering:
events:
- push
environment:
flutter: stable
groups:
- dcm_credentials
scripts:
- name: Install DCM
script: |
brew tap CQLabs/dcm
export HOMEBREW_NO_AUTO_UPDATE=1
brew install dcm
- name: Flutter packages
script: |
flutter pub get
- name: DCM verify
script: |
dcm --version
- name: Running DCM Analysis
script: >
echo "Running DCM Analysis..."

# Run DCM analysis, capture exit code and error message

DCM_OUTPUT=$(dcm analyze --ci-key=$DCM_KEY --email=$DCM_EMAIL lib --no-congratulate
--reporter=console 2>&1)

DCM_EXIT_CODE=$?


# If analysis fails, create an error summary

if [ "$DCM_EXIT_CODE" -ne 0 ]; then
echo "DCM Analysis failed with exit code $DCM_EXIT_CODE."
echo "Error Message: $DCM_OUTPUT"

# Write error summary to a markdown file
cat <<EOF > dcm_error_summary.md
# DCM Analysis Failed


DCM Analysis failed with exit code $DCM_EXIT_CODE.


## Error Message

\`\`\`

$DCM_OUTPUT

\`\`\`

EOF

# Copy the error summary to the export directory
cp dcm_error_summary.md "$CM_EXPORT_DIR/dcm_error_summary.md"

# Exit the script with the DCM exit code to mark the CI/CD step as failed
exit $DCM_EXIT_CODE
fi
- name: Run Flutter Tests
script: flutter test
artifacts:
- dcm_error_summary.md
  1. Executes dcm analyze and captures both the exit code and error message.
  2. If the analysis fails (DCM_EXIT_CODE is non-zero), the script:
    • Outputs the error to the console.
    • Writes the error details to dcm_error_summary.md in Markdown format.
  3. The dcm_error_summary.md file is added to the artifacts section, so Codemagic will include it in the build artifacts if it’s generated. The key step here is to copy the generated file into $CM_EXPORT_DIR.