Skip to content

Add convenience feature to TDML Runner #4113

Add convenience feature to TDML Runner

Add convenience feature to TDML Runner #4113

Workflow file for this run

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: CI
# Run CI when pushing a commit to main or creating a pull request or
# adding another commit to a pull request or reopening a pull request.
on:
push:
branches-ignore: [ 'dependabot/**' ]
pull_request:
types: [opened, synchronize, reopened]
# Cancel CI runs in progress when a pull request is updated.
concurrency:
group: ${{ github.head_ref || ((github.ref_name != 'main' && github.ref_name) || github.run_id) }}-${{ github.workflow }}
cancel-in-progress: true
jobs:
# Build Daffodil and run some checks.
check:
name: Java ${{ matrix.java_version }}, Scala ${{ matrix.scala_version }}, ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
java_distribution: [ temurin ]
java_version: [ 8, 11, 17, 21 ]
scala_version: [ 2.12.20 ]
os: [ ubuntu-22.04, windows-2022, macos-14 ]
exclude:
# only run macos on java 17
- os: macos-14
java_version: 8
- os: macos-14
java_version: 11
- os: macos-14
java_version: 21
include:
# configure shell/cc/ar for all OSes
- os: ubuntu-22.04
shell: bash
env_cc: clang
env_ar: llvm-ar-14
- os: windows-2022
shell: msys2 {0}
env_cc: clang
env_ar: llvm-ar
- os: macos-14
shell: bash
env_cc: cc
env_ar: ar
# configure different languages/encodings for some jobs, defaulting to en_US/UTF-8
- lang: en_US
- encoding: UTF-8
- os: ubuntu-22.04
java_version: 8
lang: de_DE
- os: ubuntu-22.04
java_version: 11
lang: ja_JP
- os: windows-2022
java_version: 8
encoding: US-ASCII
runs-on: ${{ matrix.os }}
defaults:
run:
shell: ${{ matrix.shell }}
env:
AR: ${{ matrix.env_ar }}
CC: ${{ matrix.env_cc }}
LANG: ${{ matrix.lang }}.${{ matrix.encoding }}
SBT: sbt -J-Xms1024m -J-Xmx5120m -J-XX:ReservedCodeCacheSize=512m -J-XX:MaxMetaspaceSize=1024m -J-Dfile.encoding=${{ matrix.encoding }} ++${{ matrix.scala_version }} coverage
SONARSCAN: ${{
matrix.os == 'ubuntu-22.04' &&
matrix.java_version == '17' &&
matrix.scala_version == '2.12.20' &&
github.event_name == 'push' &&
github.repository == 'apache/daffodil' &&
github.ref == 'refs/heads/main'
}}
steps:
############################################################
# Setup
############################################################
- name: Install Dependencies (macOS)
if: runner.os == 'macOS'
run: brew install sbt
- name: Check out mxml source (macOS)
if: runner.os == 'macOS'
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
repository: michaelrsweet/mxml
ref: v3.3.1
path: mxml
- name: Install mxml library (macOS)
if: runner.os == 'macOS'
run: |
cd mxml
./configure
sudo make install
- name: Install Dependencies (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get install -y libmxml-dev
sudo locale-gen $LANG
- name: Install Dependencies (Windows)
if: runner.os == 'Windows'
uses: msys2/setup-msys2@ddf331adaebd714795f1042345e6ca57bd66cea8 # v2.24.1
with:
install: clang diffutils make pkgconf
path-type: inherit
- name: Check out mxml source (Windows)
if: runner.os == 'Windows'
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
repository: michaelrsweet/mxml
ref: v3.3
path: mxml
- name: Install mxml library (Windows)
if: runner.os == 'Windows'
run: |
# Our codegen-c tests may break if mxml library is compiled with clang
export AR=ar CC=cc
cd mxml
./configure --prefix=/usr --disable-shared --disable-threads
make install
# Workaround for sbt hanging problem
echo "COURSIER_CACHE=$temp" >> $GITHUB_ENV
echo "COURSIER_CONFIG_DIR=$temp" >> $GITHUB_ENV
- name: Check out Repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# Disabling shallow clone is recommended for improving sonarcloud reporting
with:
fetch-depth: 0
- name: Setup Java
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
with:
distribution: ${{ matrix.java_distribution }}
java-version: ${{ matrix.java_version }}
cache: sbt
# Cache Action - tried on 2021-06-28, removed because it didn't help
# 1. Tried coursier/cache-action but Apache didn't allow it
# extraSbtFiles: daffodil-cli/build.sbt daffodil-japi/build.sbt
# 2. Tried actions/cache but it didn't speed up CI at all
# path: ~/.cache/coursier ~/.ivy2/cache ~/.sbt
############################################################
# Build & Package
############################################################
- name: Compile
run: $SBT compile Test/compile daffodil-test-integration/Test/compile
- name: Build Documentation
run: $SBT unidoc genTunablesDoc
- name: Package Zip & Tar
run: $SBT daffodil-cli/Universal/packageBin daffodil-cli/Universal/packageZipTarball
- name: Package RPM (Linux)
if: runner.os == 'Linux'
run: $SBT daffodil-cli/Rpm/packageBin
############################################################
# Check
############################################################
- name: Run Unit Tests
run: $SBT test
- name: Run Integration Tests
run: $SBT daffodil-test-integration/test
- name: Run Modified Example Files Check
run: git diff --color --exit-code
- name: Generate Coverage Report
run: $SBT coverageAggregate
- name: Upload Coverage Report
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Prepare for SonarCloud Scan
if: ${{ env.SONARSCAN == 'true' }}
run: |
$SBT coverageReport
find . -name scoverage.xml -exec sed -i 's#/home/runner/work/daffodil/daffodil#/github/workspace#g' {} +
- name: Run SonarCloud Scan
if: ${{ env.SONARSCAN == 'true' }}
uses: SonarSource/sonarcloud-github-action@383f7e52eae3ab0510c3cb0e7d9d150bbaeab838 # v3.1.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
with:
args: -Dproject.settings=.sonar-project.properties
# Lint checks that do not require compilation
lint:
name: Lint Checks
strategy:
fail-fast: false
matrix:
java_distribution: [ temurin ]
java_version: [ 17 ]
scala_version: [ 2.12.20 ]
os: [ ubuntu-22.04 ]
runs-on: ${{ matrix.os }}
env:
SBT: sbt -J-Xms1024m -J-Xmx5120m -J-XX:ReservedCodeCacheSize=512m -J-XX:MaxMetaspaceSize=1024m ++${{ matrix.scala_version }}
steps:
############################################################
# Setup
############################################################
- name: Check out Repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Setup Java
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
with:
distribution: ${{ matrix.java_distribution }}
java-version: ${{ matrix.java_version }}
cache: sbt
############################################################
# Lint checks
############################################################
- name: Run Rat Check
if: success() || failure()
run: $SBT ratCheck || (cat target/rat.txt; exit 1)
- name: Run OSGI Check
if: success() || failure()
run: $SBT osgiCheck
- name: Run scalafmt Check
if: success() || failure()
run: $SBT scalafmtCheckAll scalafmtSbtCheck daffodil-test-integration/scalafmtCheckAll
# Ensure pull requests only have a single commit
single-commit:
name: Single Commit Pull Request
if: github.event_name == 'pull_request'
runs-on: ubuntu-22.04
steps:
- name: Check Single Commit
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const commits = await github.rest.pulls.listCommits({
...context.repo,
pull_number: context.issue.number,
});
core.info("Number of commits in this pull request: " + commits.data.length);
if (commits.data.length > 1) {
core.setFailed("If approved with two +1's, squash this pull request into one commit");
}