Skip to content

ci: Welcome new users #987

ci: Welcome new users

ci: Welcome new users #987

Workflow file for this run

name: Docker Images CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
types: [opened, synchronize, reopened]
env:
PNPM_VERSION: 10.3.0
NODE_VERSION: 18
permissions:
id-token: write
contents: write
jobs:
sonarcloud:
name: SonarCloud
runs-on: windows-latest
if: github.event.pull_request.head.repo.fork == false
steps:
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'zulu' # Alternative distribution options are available.
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Cache SonarCloud packages
uses: actions/cache@v3
with:
path: ~\sonar\cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Cache SonarCloud scanner
id: cache-sonar-scanner
uses: actions/cache@v3
with:
path: .\.sonar\scanner
key: ${{ runner.os }}-sonar-scanner
restore-keys: ${{ runner.os }}-sonar-scanner
- uses: actions/setup-dotnet@v3
with:
global-json-file: global.json
- name: Install SonarCloud scanner
if: steps.cache-sonar-scanner.outputs.cache-hit != 'true'
shell: powershell
run: |
New-Item -Path .\.sonar\scanner -ItemType Directory
dotnet tool update dotnet-sonarscanner --tool-path .\.sonar\scanner
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- uses: pnpm/action-setup@v2
name: Install pnpm
with:
version: ${{ env.PNPM_VERSION }}
run_install: false
- name: pnpm ci
run: pnpm i --frozen-lockfile
working-directory: ./src/SlimFaasPlanetSaver
- name: pnpm run coverage
run: |
pnpm run coverage
#effacer le dossier coverage/lcov-report
Remove-Item -Path .\coverage\lcov-report -Recurse -Force
working-directory: ./src/SlimFaasPlanetSaver
- name: Build and analyze
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
shell: powershell
run: |
.\.sonar\scanner\dotnet-sonarscanner begin /k:"SlimPlanet_SlimFaas" /o:"slimplanet" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.vscoveragexml.reportsPaths=coverage.xml /d:sonar.coverage.exclusions="src/Fibonacci/**/*,src/FibonacciReact/**/*,demo/**/*,src/SlimFaasPlanetSaver/coverage/**/*" /d:sonar.javascript.lcov.reportPaths="src/SlimFaasPlanetSaver/coverage/lcov.info" /d:sonar.javascript.file.suffixes="js,jsx"
dotnet tool install --global dotnet-coverage
dotnet-coverage collect "dotnet test" -f xml -o "coverage.xml"
.\.sonar\scanner\dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}"
unit_tests:
name: Unit Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- uses: actions/setup-dotnet@v3
with:
global-json-file: global.json
- name: Run unit tests
run: |
dotnet test --collect "Code Coverage;Format=cobertura" --verbosity normal
- name: ReportGenerator
uses: danielpalme/[email protected]
with:
reports: './**/TestResults/**/*.cobertura.xml'
targetdir: 'coveragereport'
reporttypes: 'HtmlInline;MarkdownSummaryGithub'
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- uses: pnpm/action-setup@v2
name: Install pnpm
with:
version: ${{ env.PNPM_VERSION }}
run_install: false
- name: pnpm ci
run: pnpm i --frozen-lockfile
working-directory: ./src/SlimFaasPlanetSaver
- name: pnpm run coverage
run: pnpm run coverage
working-directory: ./src/SlimFaasPlanetSaver
- name: Upload coverage report artifact
uses: actions/upload-artifact@v4
with:
name: CoverageReport # Artifact name
path: coveragereport # Directory containing files to upload
tags:
needs: [unit_tests]
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.fork == false
outputs:
new_version: ${{ steps.tag.outputs.new_version }}
tag: ${{ steps.tag.outputs.tag }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Determine Alpha, Beta or Release
id: which_tag
run: |
if [[ ${{ github.ref }} == refs/pull* ]]; then
last_commit_message=$(curl -s "https://api.github.com/repos/${GITHUB_REPOSITORY}/pulls/${{ github.event.number }}/commits" | jq -r '.[-1].commit.message')
else
last_commit_message=$(git log --format=%B -n 1)
fi
echo "last commit message is: $last_commit_message"
# Check if last comment and with "(alpha)", "(beta)" or "(release)"
echo "tag=default" >> $GITHUB_OUTPUT
if [[ $last_commit_message == *alpha* ]]; then
echo "tag=alpha" >> $GITHUB_OUTPUT
fi
if [[ $last_commit_message == *beta* ]]; then
echo "tag=beta" >> $GITHUB_OUTPUT
fi
if [[ $last_commit_message == *release* && ${{ github.ref }} == 'refs/heads/main' ]]; then
echo "tag=release" >> $GITHUB_OUTPUT
fi
- name: Bump version and push tag
id: tag_release
if: steps.which_tag.outputs.tag == 'release'
uses: mathieudutour/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Bump version and push tag
id: tag_version
if: steps.which_tag.outputs.tag != 'release'
uses: mathieudutour/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
dry_run: true
- name: Compute new version number to publish
id: tag
run: |
if [[ '${{ steps.which_tag.outputs.tag }}' == 'release' ]]; then
version=${{ steps.tag_release.outputs.new_version }}
else
version=${{ steps.tag_version.outputs.new_version }}
fi
if [[ '${{ steps.which_tag.outputs.tag }}' = 'release' ]]; then
echo "new_version=$version" >> $GITHUB_OUTPUT
fi
if [[ '${{ steps.which_tag.outputs.tag }}' = 'alpha' ]]; then
echo "new_version=$version-alpha.${{ github.run_number }}" >> $GITHUB_OUTPUT
fi
if [[ '${{ steps.which_tag.outputs.tag }}' = 'beta' ]]; then
echo "new_version=$version-beta.${{ github.run_number }}" >> $GITHUB_OUTPUT
fi
if [[ '${{ steps.which_tag.outputs.tag }}' = 'default' ]]; then
if [ '${{ github.ref }}' = 'refs/heads/main' ]; then
echo "new_version=$version-dev.${{ github.run_number }}" >> $GITHUB_OUTPUT
else
echo "new_version=$version-pr.${{ github.event.number }}${{ github.run_number }}" >> $GITHUB_OUTPUT
fi
fi
tag=${{ steps.which_tag.outputs.tag }}
echo "tag=$tag" >> $GITHUB_OUTPUT
build_slimfaas:
needs: tags
if: github.event.pull_request.head.repo.fork == false
uses: ./.github/workflows/Docker.yml
with:
image_name: "axaguildev/slimfaas"
image_version: "${{ needs.tags.outputs.new_version }}"
image_build_args: ""
image_context: "."
image_file: "./Dockerfile"
platforms: "linux/amd64,linux/arm64"
secrets:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
build_fibonacci:
needs: tags
if: github.event.pull_request.head.repo.fork == false
uses: ./.github/workflows/Docker.yml
with:
image_name: "axaguildev/fibonacci"
image_version: "${{ needs.tags.outputs.new_version }}"
image_build_args: ""
image_context: "./src/Fibonacci"
image_file: "./src/Fibonacci/Dockerfile"
secrets:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
build_fibonacci_webapp:
needs: tags
if: github.event.pull_request.head.repo.fork == false
uses: ./.github/workflows/Docker.yml
with:
image_name: "axaguildev/fibonacci-webapp"
image_version: "${{ needs.tags.outputs.new_version }}"
image_build_args: ""
image_context: "./src/FibonacciReact"
image_file: "./src/FibonacciReact/Dockerfile"
secrets:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
build_slimfaas_planet_saver:
needs: tags
if: github.event.pull_request.head.repo.fork == false
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- uses: pnpm/action-setup@v2
name: Install pnpm
with:
version: ${{ env.PNPM_VERSION }}
run_install: false
- name: pnpm ci
run: pnpm i --frozen-lockfile
working-directory: ./src/SlimFaasPlanetSaver
- name: Git Configuration
id: gitconfig
run: |
git config --global user.email "[email protected]"
git config --global user.name "GitHub"
- name: pnpm version ${{ needs.tags.outputs.new_version }}
run: |
pnpm version ${{ needs.tags.outputs.new_version }}
working-directory: ./src/SlimFaasPlanetSaver
- id: Publish
uses: JS-DevTools/npm-publish@v1
with:
token: ${{ secrets.NPM_TOKEN }}
package: ./src/SlimFaasPlanetSaver/package.json
change_log:
runs-on: ubuntu-latest
needs: [ tags, build_slimfaas_planet_saver, build_slimfaas ]
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GIT_TOKEN }}
fetch-depth: 0
- name: Commit and push
if: needs.tags.outputs.tag == 'release'
run: |
git config --global user.name "GitHub"
git config --global user.email "[email protected]"
chmod +x ./.bin/generate-changelog.sh
./.bin/generate-changelog.sh
git add .
git commit -s -m "[skip ci] Generate changelog to version ${{ steps.tag.outputs.new_version }}"
git tag ${{ steps.tag.outputs.new_version }}
git push --set-upstream origin "HEAD:main" --follow-tags -f