Task/minor updates #192
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI Pipeline | |
on: | |
push: | |
branches: | |
- main | |
- beta | |
pull_request: | |
branches: | |
- '**' | |
jobs: | |
tests: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Node.js with Cache and Install | |
uses: ./.github/actions/install-dependencies | |
with: | |
node-version: '20.18.0' | |
- name: Fetch main branch and run commitlint | |
if: github.event_name == 'pull_request' | |
run: | | |
git fetch origin main | |
npx commitlint --from=$GITHUB_BASE_REF | |
- name: Run linters (eslint, markdownlint) | |
run: | | |
npm run eslint | |
npm run markdownlint | |
- name: Run Hadolint on Dockerfile | |
uses: hadolint/[email protected] | |
with: | |
dockerfile: ./Dockerfile | |
- name: Run tests | |
run: npm run test:coverage | |
- name: Report coverage to Codacy | |
if: github.ref == 'refs/heads/main' | |
env: | |
CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }} | |
run: wget -qO - https://coverage.codacy.com/get.sh | bash -s -- report -r ./coverage/cobertura-coverage.xml | |
- name: Build the project | |
run: npm run build:cli | |
- name: Upload tests artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: tests-artifacts | |
path: | | |
./dist | |
./bin | |
retention-days: 1 | |
debug: | |
runs-on: ubuntu-latest | |
if: github.event_name == 'pull_request' | |
needs: tests | |
strategy: | |
matrix: | |
node-version: [18, 20, 22, 23] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Download build artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: tests-artifacts | |
path: ./ | |
- name: Set up Node.js with Cache and Install | |
uses: ./.github/actions/install-dependencies | |
with: | |
node-version: '20.18.0' | |
- name: Run debug:bin | |
run: npm run debug:bin | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up Node.js with Cache and Install | |
uses: ./.github/actions/install-dependencies | |
with: | |
node-version: '20.18.0' | |
- name: Generate new version | |
env: | |
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
run: npx semantic-release --dry-run --no-ci | |
- name: Build the project | |
run: | | |
export VERSION=$(cat .VERSION) | |
npm run build | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: build-artifacts | |
path: | | |
./dist | |
./bin | |
./pkg | |
retention-days: 7 | |
build_sea: | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
strategy: | |
matrix: | |
arch: [amd64, arm64] | |
os: [alpine, bullseye] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Download build artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: build-artifacts | |
path: ./ | |
- name: Set up QEMU for multi-arch | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: linux/arm64 | |
- name: Build SEA | |
run: | | |
docker run --rm --platform linux/${{ matrix.arch }} -v "$PWD":/app -w /app node:20.18.0-${{ matrix.os }} ./scripts/generate-sea.sh ./sea/dclint-${{ matrix.os }}-${{ matrix.arch }} | |
- name: Upload build SEA artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: build-sea-artifacts-${{ matrix.os }}-${{ matrix.arch }} | |
path: | | |
./sea | |
retention-days: 7 | |
release: | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/main' | |
needs: | |
- tests | |
- build | |
- build_sea | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
# ---------- | |
# Download and Organize Artifacts | |
# ---------- | |
- name: Download Artifacts | |
uses: actions/download-artifact@v4 | |
- name: Organize downloaded artifacts | |
run: | | |
mv build-artifacts/* . | |
mkdir -p ./sea | |
for dir in build-sea-artifacts-*; do | |
mv "$dir/"* ./sea | |
done | |
# ---------- | |
# Create npm release, tag, github release | |
# ---------- | |
- name: Set up Node.js with Cache and Install | |
uses: ./.github/actions/install-dependencies | |
with: | |
node-version: '20.18.0' | |
- name: Run semantic-release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
run: npx semantic-release | |
- name: Upload release artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: release-artifacts | |
path: | | |
./package.json | |
./package-lock.json | |
./CHANGELOG.md | |
retention-days: 1 | |
# ---------- | |
# Publishing Docker images | |
# ---------- | |
- name: Get build arguments | |
id: vars | |
run: | | |
BUILD_DATE=$(date +%Y-%m-%dT%T%z) | |
BUILD_VERSION=$(awk -F\" '/"version":/ {print $4}' package.json) | |
BUILD_REVISION=$(git rev-parse --short HEAD) | |
echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV | |
echo "BUILD_VERSION=$BUILD_VERSION" >> $GITHUB_ENV | |
echo "BUILD_REVISION=$BUILD_REVISION" >> $GITHUB_ENV | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
install: true | |
- name: Log in to DockerHub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
# Build and push the Alpine version | |
- name: Build and push Alpine version | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
push: true | |
platforms: linux/amd64,linux/arm64 | |
tags: | | |
${{ secrets.DOCKERHUB_USERNAME }}/dclint:alpine | |
${{ secrets.DOCKERHUB_USERNAME }}/dclint:latest-alpine | |
${{ secrets.DOCKERHUB_USERNAME }}/dclint:${{ env.BUILD_VERSION }}-alpine | |
build-args: | | |
BUILD_DATE=${{ env.BUILD_DATE }} | |
BUILD_VERSION=${{ env.BUILD_VERSION }} | |
BUILD_REVISION=${{ env.BUILD_REVISION }} | |
target: alpine-version | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
# Build and push the Scratch version | |
- name: Build and push Scratch version | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
push: true | |
platforms: linux/amd64,linux/arm64 | |
tags: | | |
${{ secrets.DOCKERHUB_USERNAME }}/dclint:latest | |
${{ secrets.DOCKERHUB_USERNAME }}/dclint:${{ env.BUILD_VERSION }} | |
build-args: | | |
BUILD_DATE=${{ env.BUILD_DATE }} | |
BUILD_VERSION=${{ env.BUILD_VERSION }} | |
BUILD_REVISION=${{ env.BUILD_REVISION }} | |
target: scratch-version | |
cache-from: type=gha | |
cache-to: type=gha,mode=max |