name: KiBot CI on: workflow_dispatch: push: tags: - release/rev-** branches: - main - dev - review/rev-** paths-ignore: - '*.md' env: # KiBot Configuration kibot_cache: cache kibot_config: kibot/yaml/kibot_main.yaml kibot_draft: false kibot_log: kibot_run.log # Update these to correspond to the KiCad version kibot_group: "all_group" kibot_tag: "v2_dk9" jobs: test: runs-on: ubuntu-latest container: ghcr.io/inti-cmnb/kicad9_auto_full:dev if: ${{ github.ref_type == 'tag' || !startsWith(github.event.head_commit.message, 'Merge pull request') }} steps: - name: Install NodeJS run: | apt-get update && apt -y install --no-install-recommends nodejs - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 sparse-checkout: null - name: Dump Environment continue-on-error: true run: echo "${{ toJSON(env) }}" - name: Dump Context continue-on-error: true shell: bash run: echo "${{ toJSON(github) }}" - name: Determine Release Stage shell: bash run: | stage=unknown if [ "${{ github.ref == 'refs/heads/dev' }}" = "true" ] ; then if [ "${{ env.kibot_draft }}" = "true" ] ; then stage=DRAFT else stage=WORKING fi else if [ "${{ env.kibot_draft}}" == "true" ] ; then echo "Error: kibot_draft is set outside of dev branch" exit 1 fi if [ "${{ startsWith(github.ref, 'refs/heads/review/rev-') }}" = "true" ] ; then stage=REVIEW elif [ "${{ github.ref_type == 'tag' }}" = "true" ] ; then stage=RELEASE else echo "Error: could not determine release stage" exit 1 fi fi echo "Release Stage: $stage" echo "kibot_stage=$stage" > $GITHUB_ENV - name: Setup KiBot Arguments shell: bash run: | last_tag=$(git describe --tags --abbrev=0 || echo "NO_TAG") echo "Last tag: ${last_tag}" if [ "${{ github.ref_type }}" = "tag" ]; then version_arg="-E RELEASE_STATE='RELEASE' -E REVISION='${last_tag##release/rev-}'" echo "Overriding kibot_variant to 'RELEASE' for tag" echo "kibot_variant=RELEASE" >> $GITHUB_ENV else version_arg="-E RELEASE_STATE='${{ env.kibot_stage }}' -E REVISION='${last_tag##release/rev-}+ (Unreleased)'" echo "kibot_variant=${{ env.kibot_stage }}" >> $GITHUB_ENV fi case "$kibot_stage" in "DRAFT") additional_args="--skip-pre draw_fancy_stackup,erc,drc ${version_arg} --log ${{ env.kibot_log }} draft_group" ;; "WORKING") additional_args="--skip-pre erc,drc ${version_arg} -E BLENDER_SAMPLES=2 --log ${{ env.kibot_log }} ${{ env.kibot_group }}" ;; "REVIEW"|"RELEASE") additional_args="${version_arg} --log ${{ env.kibot_log }} ${{ env.kibot_group }}" ;; *) echo "Unknown Stage: $kibot_stage" exit 1 ;; esac echo "version_arg=${version_arg}" >> $GITHUB_ENV echo "additional_args=${additional_args}" >> $GITHUB_ENV - name: Remove KiRi Files from Prior Revisions shell: bash run: '[ -d kiri ] && git rm -rf kiri/* || echo "No KiRi files to delete"' - name: Retrieve Cached 3d Models id: cache-models-restore uses: actions/cache/restore@v4 with: path: cache/3d_models key: 3d_models - name: List Cached 3d Models shell: bash run: '[ -d cache/3d_models ] && ls -l cache/3d_models/* || echo "No Cached 3d Models"' - name: Run KiBot (Update XML) uses: inti-cmnb/kibot@${{ env.kibot_tag }} with: config: kibot/yaml/kibot_pre_update_xml.yaml - name: Run KiBot (Preprocessing) uses: inti-cmnb/kibot@${{ env.kibot_tag }} with: additional_args: --skip-pre all ${{ env.version_arg }} preprocess_group config: ${{ env.kibot_config }} # - name: Run KiBot (Outputs) # uses: inti-cmnb/kibot@${{ env.kibot_tag }} # env: # KIBOT_3D_MODELS: cache/3d_models # with: # additional_args: ${{ env.additional_args }} # config: ${{ env.kibot_config }} # cache3D: YES - name: Run KiBot (Outputs) shell: bash run: | kibot --version | awk '{ print $1 ": " $2 }' echo KiCad: `dpkg --robot -l kicad | grep kicad | awk '{print $3}'` echo Debian: `cat /etc/debian_version` pcbnew_do --version | awk 'BEGIN{ done=0 } { if (done == 0) { print "KiAuto: " $2; done=1 } }' echo "iBoM:" `INTERACTIVE_HTML_BOM_NO_DISPLAY=True generate_interactive_bom.py --version 2> /dev/null | grep "^v" | tr -d 'v'` echo /usr/bin/kicad-git-filters.py export KIBOT_3D_MODELS="${{ env.kibot_cache }}/3d_models" echo Exporting KIBOT_3D_MODELS=$KIBOT_3D_MODELS kibot -c ${{ env.kibot_config }} ${{ env.additional_args }} - name: Save Cached 3d Models id: cache-models-save if: always() uses: actions/cache/save@v4 with: path: cache/3d_models key: ${{ steps.cache-models-restore.outputs.cache-primary-key }} - name: Pull latest changes shell: bash run: | git config --global user.email "gitea-actions[bot]@users.noreply.git.asymworks.com" git config --global user.name "Gitea Actions" if [ "${{ github.ref_type }}" = "tag" ]; then echo "Triggered by a tag, committing changes in detached HEAD state" git add -A git commit -m "[bot]: Update Outputs (release)" DETACHED_COMMIT=$(git rev-parse HEAD) echo "Checking out the main branch" git fetch origin main git checkout main echo "Merging detached HEAD commit into main" git merge --no-ff $DETACHED_COMMIT -m "[bot]: Merge release artifacts from workflow" -X theirs echo "Pushing to main branch" git push origin main else echo "Triggered by a branch, using the current branch" git pull origin ${{ github.ref_name }} --tags --force fi - name: Discard changes to .kicad_pcb files and remove temp files run: | git checkout HEAD -- $(git ls-files "*.kicad_pcb") git clean -f -e "panels/*" "*.kicad_pcb" git clean -f -e "panels/*" "*.kicad_pro" git clean -f -e "panels/*" "*.kicad_dru" git clean -f -e "panels/*" "*.kicad_prl" - name: Push Outputs uses: stefanzweifel/git-auto-commit-action@v5 with: branch: ${{ github.ref_name }} commit_message: '[bot]: Update Outputs' - name: Upload KiBot Log if: ${{ always() }} uses: christopherhx/gitea-upload-artifact@v4 with: name: log_file_kibot path: ${{ env.kibot_log }} - name: Upload Drawing Notes Log if: ${{ always() && env.kibot_stage != 'DRAFT' }} uses: christopherhx/gitea-upload-artifact@v4 with: name: log_file_notes path: kibot_run_notes.log - name: Upload README Log if: ${{ always() && env.kibot_stage == 'DRAFT' }} uses: christopherhx/gitea-upload-artifact@v4 with: name: log_file_readme path: kibot_run_readme.log