element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Embedded and Microcontrollers
  • Technologies
  • More
Embedded and Microcontrollers
Embedded Forum Try out GoogleTest: invoke unit test when creating a GitHub pull request
  • Blog
  • Forum
  • Documents
  • Quiz
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Embedded and Microcontrollers to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • Replies 8 replies
  • Subscribers 459 subscribers
  • Views 865 views
  • Users 0 members are here
  • unit test
  • c++26
  • c++
  • vscode
  • googletest
Related

Try out GoogleTest: invoke unit test when creating a GitHub pull request

Jan Cumps
Jan Cumps 6 months ago

This week I'm going to learn GoogleTest for c++. Goals for day 5: use the tests in a GitHub project that depends on the GPS libraries that I created the unit tests for.

In the previous 4 posts, I created unit tests for two GPS libraries: A NMEA GPS payload parser, and a driver lib for the Teseo GPS IC. In this post, I will run those unit tests in a Raspberry Pico project that relies on these libs: https://github.com/jancumps/pico_gps_teseo.

Goal: each time you create a pull request for that project's development or main branch, an action will run. That action will check out the google unit tests, and the sources of the Pico GPS project. It will then run the test cases over that project's version of the libraries. Only if that succeeds, you can approve the pull request and merge the code.

image

The GitHub Action

Here is the GitHub action script. It 'll

  • first commission a fresh Ubuntu Linux session
  • then install dependencies (such as the required gcc toolchain and CMake versions),
  • then check out both unit test sources (main branch) and the code of the project (version that's contained in the pull request).
  • Next step is to build the test suite, based on those two sources
  • and finally execute all unit tests.

name: run unit tests of the teseo and nmea libs
on:
  workflow_dispatch:
  #push:
  #  branches:
  #    - 'develop'
  #    - 'main'
  pull_request:
    types: [opened, reopened]
    branches:
      - 'develop'
      - 'main'

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Clean workspace
        run: |
          echo "Cleaning up previous run"
          rm -rf "${{ github.workspace }}"
          mkdir -p "${{ github.workspace }}"

      - name: Checkout test_gps_teseo
        uses: actions/checkout@v4
        with:
          path: test_gps_teseo
          submodules: true
          repository: jancumps/test_gps_teseo

      - name: Checkout pico_gps_teseo
        uses: actions/checkout@v4
        with:
          path: test_gps_teseo/pico_gps_teseo
          submodules: true

      - name: Install dependencies
        run: |
          sudo apt-get install ninja-build

          sudo apt-get install cmake
          sudo add-apt-repository universe
          sudo apt update
          sudo apt install gcc-14
          gcc --version
          whereis gcc
          whereis gcc-14
          ls -la /usr/bin | grep g++

      - name: Build Project
        working-directory: ${{github.workspace}}/test_gps_teseo
        shell: bash
        run: |
          echo ${{ github.ref }}
          mkdir build
          cd build
          cmake .. -G "Ninja" -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/x86_64-linux-gnu-gcc-14 -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/x86_64-linux-gnu-g++-14 -DCMAKE_BUILD_TYPE=Release -DPATH_TO_LIBS=pico_gps_teseo
          cmake --build .
          cd ..

      - name: Test Project
        working-directory: ${{github.workspace}}/test_gps_teseo
        shell: bash
        run: |
          cd build
          chmod +x ./test_class_module
          ./test_class_module
          cd ..

If the unit tests fail, the action run will fail too.

Test execution

If you have rights to view action logs of the GitHub repository, you can see the log of all activities. Here's part of the test job:

image

Raw log:

2025-02-23T18:22:28.9220715Z Current runner version: '2.322.0'
2025-02-23T18:22:28.9246979Z ##[group]Operating System
2025-02-23T18:22:28.9247780Z Ubuntu
2025-02-23T18:22:28.9248306Z 24.04.1
2025-02-23T18:22:28.9248912Z LTS
2025-02-23T18:22:28.9249403Z ##[endgroup]
2025-02-23T18:22:28.9249985Z ##[group]Runner Image
2025-02-23T18:22:28.9250618Z Image: ubuntu-24.04
2025-02-23T18:22:28.9251143Z Version: 20250209.1.0
2025-02-23T18:22:28.9252326Z Included Software: https://github.com/actions/runner-images/blob/ubuntu24/20250209.1/images/ubuntu/Ubuntu2404-Readme.md
2025-02-23T18:22:28.9253835Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu24%2F20250209.1
2025-02-23T18:22:28.9254716Z ##[endgroup]
2025-02-23T18:22:28.9255245Z ##[group]Runner Image Provisioner
2025-02-23T18:22:28.9255903Z 2.0.422.1
2025-02-23T18:22:28.9256401Z ##[endgroup]
2025-02-23T18:22:28.9258644Z ##[group]GITHUB_TOKEN Permissions
2025-02-23T18:22:28.9260543Z Actions: write
2025-02-23T18:22:28.9261373Z Attestations: write
2025-02-23T18:22:28.9262157Z Checks: write
2025-02-23T18:22:28.9262721Z Contents: write
2025-02-23T18:22:28.9263283Z Deployments: write
2025-02-23T18:22:28.9263822Z Discussions: write
2025-02-23T18:22:28.9264386Z Issues: write
2025-02-23T18:22:28.9264901Z Metadata: read
2025-02-23T18:22:28.9265369Z Packages: write
2025-02-23T18:22:28.9265918Z Pages: write
2025-02-23T18:22:28.9266434Z PullRequests: write
2025-02-23T18:22:28.9266957Z RepositoryProjects: write
2025-02-23T18:22:28.9267605Z SecurityEvents: write
2025-02-23T18:22:28.9268111Z Statuses: write
2025-02-23T18:22:28.9268593Z ##[endgroup]
2025-02-23T18:22:28.9271490Z Secret source: Actions
2025-02-23T18:22:28.9272352Z Prepare workflow directory
2025-02-23T18:22:28.9659425Z Prepare all required actions
2025-02-23T18:22:28.9698134Z Getting action download info
2025-02-23T18:22:29.1848196Z ##[group]Download immutable action package 'actions/checkout@v4'
2025-02-23T18:22:29.1849095Z Version: 4.2.2
2025-02-23T18:22:29.1849965Z Digest: sha256:ccb2698953eaebd21c7bf6268a94f9c26518a7e38e27e0b83c1fe1ad049819b1
2025-02-23T18:22:29.1850987Z Source commit SHA: 11bd71901bbe5b1630ceea73d27597364c9af683
2025-02-23T18:22:29.1851594Z ##[endgroup]
2025-02-23T18:22:29.3669954Z Complete job name: test
2025-02-23T18:22:29.4374523Z ##[group]Run echo "Cleaning up previous run"
2025-02-23T18:22:29.4375224Z echo "Cleaning up previous run"
2025-02-23T18:22:29.4375896Z rm -rf "/home/runner/work/pico_gps_teseo/pico_gps_teseo"
2025-02-23T18:22:29.4376744Z mkdir -p "/home/runner/work/pico_gps_teseo/pico_gps_teseo"
2025-02-23T18:22:29.4614541Z shell: /usr/bin/bash -e {0}
2025-02-23T18:22:29.4615422Z ##[endgroup]
2025-02-23T18:22:29.4767777Z Cleaning up previous run
2025-02-23T18:22:29.4942159Z ##[group]Run actions/checkout@v4
2025-02-23T18:22:29.4942704Z with:
2025-02-23T18:22:29.4943080Z   path: test_gps_teseo
2025-02-23T18:22:29.4943518Z   submodules: true
2025-02-23T18:22:29.4943945Z   repository: jancumps/test_gps_teseo
2025-02-23T18:22:29.4944589Z   token: ***
2025-02-23T18:22:29.4944994Z   ssh-strict: true
2025-02-23T18:22:29.4945387Z   ssh-user: git
2025-02-23T18:22:29.4945802Z   persist-credentials: true
2025-02-23T18:22:29.4946262Z   clean: true
2025-02-23T18:22:29.4946667Z   sparse-checkout-cone-mode: true
2025-02-23T18:22:29.4947143Z   fetch-depth: 1
2025-02-23T18:22:29.4947533Z   fetch-tags: false
2025-02-23T18:22:29.4947934Z   show-progress: true
2025-02-23T18:22:29.4948344Z   lfs: false
2025-02-23T18:22:29.4948728Z   set-safe-directory: true
2025-02-23T18:22:29.4949183Z ##[endgroup]
2025-02-23T18:22:29.7510886Z Syncing repository: jancumps/test_gps_teseo
2025-02-23T18:22:29.7513339Z ##[group]Getting Git version info
2025-02-23T18:22:29.7514512Z Working directory is '/home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo'
2025-02-23T18:22:29.7515630Z [command]/usr/bin/git version
2025-02-23T18:22:29.7639891Z git version 2.48.1
2025-02-23T18:22:29.7669942Z ##[endgroup]
2025-02-23T18:22:29.7685174Z Temporarily overriding HOME='/home/runner/work/_temp/2c039b20-1972-4a61-a906-5bf59d32aef9' before making global git config changes
2025-02-23T18:22:29.7687901Z Adding repository directory to the temporary git global config as a safe directory
2025-02-23T18:22:29.7692174Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo
2025-02-23T18:22:29.7728838Z ##[group]Initializing the repository
2025-02-23T18:22:29.7734731Z [command]/usr/bin/git init /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo
2025-02-23T18:22:29.8000021Z hint: Using 'master' as the name for the initial branch. This default branch name
2025-02-23T18:22:29.8001064Z hint: is subject to change. To configure the initial branch name to use in all
2025-02-23T18:22:29.8002128Z hint: of your new repositories, which will suppress this warning, call:
2025-02-23T18:22:29.8002801Z hint:
2025-02-23T18:22:29.8003285Z hint: 	git config --global init.defaultBranch <name>
2025-02-23T18:22:29.8003853Z hint:
2025-02-23T18:22:29.8004391Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
2025-02-23T18:22:29.8005294Z hint: 'development'. The just-created branch can be renamed via this command:
2025-02-23T18:22:29.8005988Z hint:
2025-02-23T18:22:29.8006371Z hint: 	git branch -m <name>
2025-02-23T18:22:29.8014753Z Initialized empty Git repository in /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/.git/
2025-02-23T18:22:29.8025959Z [command]/usr/bin/git remote add origin https://github.com/jancumps/test_gps_teseo
2025-02-23T18:22:29.8063742Z ##[endgroup]
2025-02-23T18:22:29.8064854Z ##[group]Disabling automatic garbage collection
2025-02-23T18:22:29.8068667Z [command]/usr/bin/git config --local gc.auto 0
2025-02-23T18:22:29.8097938Z ##[endgroup]
2025-02-23T18:22:29.8098604Z ##[group]Setting up auth
2025-02-23T18:22:29.8104813Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2025-02-23T18:22:29.8135752Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2025-02-23T18:22:29.8516457Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2025-02-23T18:22:29.8551404Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2025-02-23T18:22:29.8779491Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
2025-02-23T18:22:29.8824049Z ##[endgroup]
2025-02-23T18:22:29.8825063Z ##[group]Determining the default branch
2025-02-23T18:22:29.8827397Z Retrieving the default branch name
2025-02-23T18:22:30.1562859Z Default branch 'main'
2025-02-23T18:22:30.1564334Z ##[endgroup]
2025-02-23T18:22:30.1565595Z ##[group]Fetching the repository
2025-02-23T18:22:30.1571758Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +refs/heads/main:refs/remotes/origin/main
2025-02-23T18:22:30.7022872Z From https://github.com/jancumps/test_gps_teseo
2025-02-23T18:22:30.7023959Z  * [new branch]      main       -> origin/main
2025-02-23T18:22:30.7052348Z ##[endgroup]
2025-02-23T18:22:30.7053165Z ##[group]Determining the checkout info
2025-02-23T18:22:30.7054327Z ##[endgroup]
2025-02-23T18:22:30.7060320Z [command]/usr/bin/git sparse-checkout disable
2025-02-23T18:22:30.7104948Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig
2025-02-23T18:22:30.7133004Z ##[group]Checking out the ref
2025-02-23T18:22:30.7137427Z [command]/usr/bin/git checkout --progress --force -B main refs/remotes/origin/main
2025-02-23T18:22:30.7193086Z Switched to a new branch 'main'
2025-02-23T18:22:30.7196915Z branch 'main' set up to track 'origin/main'.
2025-02-23T18:22:30.7203241Z ##[endgroup]
2025-02-23T18:22:30.7204515Z ##[group]Setting up auth for fetching submodules
2025-02-23T18:22:30.7207596Z [command]/usr/bin/git config --global http.https://github.com/.extraheader AUTHORIZATION: basic ***
2025-02-23T18:22:30.7245493Z [command]/usr/bin/git config --global --unset-all url.https://github.com/.insteadOf
2025-02-23T18:22:30.7278084Z [command]/usr/bin/git config --global --add url.https://github.com/.insteadOf git@github.com:
2025-02-23T18:22:30.7311728Z [command]/usr/bin/git config --global --add url.https://github.com/.insteadOf org-5400863@github.com:
2025-02-23T18:22:30.7343205Z ##[endgroup]
2025-02-23T18:22:30.7344576Z ##[group]Fetching submodules
2025-02-23T18:22:30.7345959Z [command]/usr/bin/git submodule sync
2025-02-23T18:22:30.7598995Z [command]/usr/bin/git -c protocol.version=2 submodule update --init --force --depth=1
2025-02-23T18:22:30.7815950Z Submodule 'source/gps_nmea_lib' (https://github.com/jancumps/gps_nmea_lib) registered for path 'source/gps_nmea_lib'
2025-02-23T18:22:30.7823353Z Submodule 'source/gps_teseo_lib' (https://github.com/jancumps/gps_teseo_lib) registered for path 'source/gps_teseo_lib'
2025-02-23T18:22:30.7850896Z Cloning into '/home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/source/gps_nmea_lib'...
2025-02-23T18:22:31.2764050Z Cloning into '/home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/source/gps_teseo_lib'...
2025-02-23T18:22:31.7650549Z Submodule path 'source/gps_nmea_lib': checked out '033cfe411ca3df33e3b1d271d9b4c9bd72ec37b2'
2025-02-23T18:22:31.7722785Z Submodule path 'source/gps_teseo_lib': checked out 'd24ba56ba182dce68071dbc8b710988e245ed4f6'
2025-02-23T18:22:31.7738247Z [command]/usr/bin/git submodule foreach git config --local gc.auto 0
2025-02-23T18:22:31.7974291Z Entering 'source/gps_nmea_lib'
2025-02-23T18:22:31.7998233Z Entering 'source/gps_teseo_lib'
2025-02-23T18:22:31.8029231Z ##[endgroup]
2025-02-23T18:22:31.8029723Z ##[group]Persisting credentials for submodules
2025-02-23T18:22:31.8035959Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'url\.https\:\/\/github\.com\/\.insteadOf' && git config --local --unset-all 'url.https://github.com/.insteadOf' || :"
2025-02-23T18:22:31.8254953Z Entering 'source/gps_nmea_lib'
2025-02-23T18:22:31.8298215Z Entering 'source/gps_teseo_lib'
2025-02-23T18:22:31.8353319Z [command]/usr/bin/git submodule foreach sh -c "git config --local 'http.https://github.com/.extraheader' 'AUTHORIZATION: basic ***' && git config --local --show-origin --name-only --get-regexp remote.origin.url"
2025-02-23T18:22:31.8569573Z Entering 'source/gps_nmea_lib'
2025-02-23T18:22:31.8607977Z file:/home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/.git/modules/source/gps_nmea_lib/config	remote.origin.url
2025-02-23T18:22:31.8613192Z Entering 'source/gps_teseo_lib'
2025-02-23T18:22:31.8650861Z file:/home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/.git/modules/source/gps_teseo_lib/config	remote.origin.url
2025-02-23T18:22:31.8679478Z [command]/usr/bin/git submodule foreach git config --local --add 'url.https://github.com/.insteadOf' 'git@github.com:'
2025-02-23T18:22:31.8893639Z Entering 'source/gps_nmea_lib'
2025-02-23T18:22:31.8916795Z Entering 'source/gps_teseo_lib'
2025-02-23T18:22:31.8950912Z [command]/usr/bin/git submodule foreach git config --local --add 'url.https://github.com/.insteadOf' 'org-5400863@github.com:'
2025-02-23T18:22:31.9165371Z Entering 'source/gps_nmea_lib'
2025-02-23T18:22:31.9188921Z Entering 'source/gps_teseo_lib'
2025-02-23T18:22:31.9227432Z ##[endgroup]
2025-02-23T18:22:31.9264045Z [command]/usr/bin/git log -1 --format=%H
2025-02-23T18:22:31.9287970Z e2e5c531f27850724e2d4b255a779cc993aa3f4a
2025-02-23T18:22:31.9466611Z ##[group]Run actions/checkout@v4
2025-02-23T18:22:31.9466945Z with:
2025-02-23T18:22:31.9467193Z   path: test_gps_teseo/pico_gps_teseo
2025-02-23T18:22:31.9467492Z   submodules: true
2025-02-23T18:22:31.9467762Z   repository: jancumps/pico_gps_teseo
2025-02-23T18:22:31.9468186Z   token: ***
2025-02-23T18:22:31.9468416Z   ssh-strict: true
2025-02-23T18:22:31.9468650Z   ssh-user: git
2025-02-23T18:22:31.9469079Z   persist-credentials: true
2025-02-23T18:22:31.9469340Z   clean: true
2025-02-23T18:22:31.9469585Z   sparse-checkout-cone-mode: true
2025-02-23T18:22:31.9469868Z   fetch-depth: 1
2025-02-23T18:22:31.9470095Z   fetch-tags: false
2025-02-23T18:22:31.9470340Z   show-progress: true
2025-02-23T18:22:31.9470578Z   lfs: false
2025-02-23T18:22:31.9470808Z   set-safe-directory: true
2025-02-23T18:22:31.9471077Z ##[endgroup]
2025-02-23T18:22:32.0391270Z Syncing repository: jancumps/pico_gps_teseo
2025-02-23T18:22:32.0398648Z ##[group]Getting Git version info
2025-02-23T18:22:32.0399833Z Working directory is '/home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo'
2025-02-23T18:22:32.0442492Z [command]/usr/bin/git version
2025-02-23T18:22:32.0485611Z git version 2.48.1
2025-02-23T18:22:32.0511036Z ##[endgroup]
2025-02-23T18:22:32.0524597Z Temporarily overriding HOME='/home/runner/work/_temp/bf6c3c0c-ac12-4900-af47-daebc146816f' before making global git config changes
2025-02-23T18:22:32.0526213Z Adding repository directory to the temporary git global config as a safe directory
2025-02-23T18:22:32.0531091Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo
2025-02-23T18:22:32.0561464Z ##[group]Initializing the repository
2025-02-23T18:22:32.0567233Z [command]/usr/bin/git init /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo
2025-02-23T18:22:32.0603841Z hint: Using 'master' as the name for the initial branch. This default branch name
2025-02-23T18:22:32.0604902Z hint: is subject to change. To configure the initial branch name to use in all
2025-02-23T18:22:32.0605816Z hint: of your new repositories, which will suppress this warning, call:
2025-02-23T18:22:32.0606495Z hint:
2025-02-23T18:22:32.0606841Z hint: 	git config --global init.defaultBranch <name>
2025-02-23T18:22:32.0607179Z hint:
2025-02-23T18:22:32.0607545Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
2025-02-23T18:22:32.0608100Z hint: 'development'. The just-created branch can be renamed via this command:
2025-02-23T18:22:32.0608491Z hint:
2025-02-23T18:22:32.0608741Z hint: 	git branch -m <name>
2025-02-23T18:22:32.0609361Z Initialized empty Git repository in /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo/.git/
2025-02-23T18:22:32.0616082Z [command]/usr/bin/git remote add origin https://github.com/jancumps/pico_gps_teseo
2025-02-23T18:22:32.0647694Z ##[endgroup]
2025-02-23T18:22:32.0648199Z ##[group]Disabling automatic garbage collection
2025-02-23T18:22:32.0652375Z [command]/usr/bin/git config --local gc.auto 0
2025-02-23T18:22:32.0683355Z ##[endgroup]
2025-02-23T18:22:32.0684311Z ##[group]Setting up auth
2025-02-23T18:22:32.0689848Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2025-02-23T18:22:32.0721480Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2025-02-23T18:22:32.0969340Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2025-02-23T18:22:32.1001725Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2025-02-23T18:22:32.1257456Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
2025-02-23T18:22:32.1295232Z ##[endgroup]
2025-02-23T18:22:32.1295928Z ##[group]Fetching the repository
2025-02-23T18:22:32.1305020Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +2479ca309986927c8ff327f8d2bb2586a76162b1:refs/remotes/pull/167/merge
2025-02-23T18:22:32.6250635Z From https://github.com/jancumps/pico_gps_teseo
2025-02-23T18:22:32.6251337Z  * [new ref]         2479ca309986927c8ff327f8d2bb2586a76162b1 -> pull/167/merge
2025-02-23T18:22:32.6273512Z ##[endgroup]
2025-02-23T18:22:32.6274078Z ##[group]Determining the checkout info
2025-02-23T18:22:32.6275681Z ##[endgroup]
2025-02-23T18:22:32.6280415Z [command]/usr/bin/git sparse-checkout disable
2025-02-23T18:22:32.6318246Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig
2025-02-23T18:22:32.6344676Z ##[group]Checking out the ref
2025-02-23T18:22:32.6349477Z [command]/usr/bin/git checkout --progress --force refs/remotes/pull/167/merge
2025-02-23T18:22:32.6400551Z Note: switching to 'refs/remotes/pull/167/merge'.
2025-02-23T18:22:32.6401076Z 
2025-02-23T18:22:32.6401608Z You are in 'detached HEAD' state. You can look around, make experimental
2025-02-23T18:22:32.6402612Z changes and commit them, and you can discard any commits you make in this
2025-02-23T18:22:32.6403378Z state without impacting any branches by switching back to a branch.
2025-02-23T18:22:32.6403832Z 
2025-02-23T18:22:32.6404112Z If you want to create a new branch to retain commits you create, you may
2025-02-23T18:22:32.6404838Z do so (now or later) by using -c with the switch command. Example:
2025-02-23T18:22:32.6405235Z 
2025-02-23T18:22:32.6405400Z   git switch -c <new-branch-name>
2025-02-23T18:22:32.6405676Z 
2025-02-23T18:22:32.6405834Z Or undo this operation with:
2025-02-23T18:22:32.6406087Z 
2025-02-23T18:22:32.6406212Z   git switch -
2025-02-23T18:22:32.6406436Z 
2025-02-23T18:22:32.6406764Z Turn off this advice by setting config variable advice.detachedHead to false
2025-02-23T18:22:32.6407115Z 
2025-02-23T18:22:32.6407437Z HEAD is now at 2479ca3 Merge 8c923c286f2e88c401ba408faac1114fb58d4e29 into d334638cc9682e4fb8cb75f8f1cecea47a845f33
2025-02-23T18:22:32.6410560Z ##[endgroup]
2025-02-23T18:22:32.6410952Z ##[group]Setting up auth for fetching submodules
2025-02-23T18:22:32.6415048Z [command]/usr/bin/git config --global http.https://github.com/.extraheader AUTHORIZATION: basic ***
2025-02-23T18:22:32.6447994Z [command]/usr/bin/git config --global --unset-all url.https://github.com/.insteadOf
2025-02-23T18:22:32.6475479Z [command]/usr/bin/git config --global --add url.https://github.com/.insteadOf git@github.com:
2025-02-23T18:22:32.6504859Z [command]/usr/bin/git config --global --add url.https://github.com/.insteadOf org-5400863@github.com:
2025-02-23T18:22:32.6529109Z ##[endgroup]
2025-02-23T18:22:32.6529620Z ##[group]Fetching submodules
2025-02-23T18:22:32.6533354Z [command]/usr/bin/git submodule sync
2025-02-23T18:22:32.6763506Z [command]/usr/bin/git -c protocol.version=2 submodule update --init --force --depth=1
2025-02-23T18:22:32.6983579Z Submodule 'gps_nmea_lib' (https://github.com/jancumps/gps_nmea_lib.git) registered for path 'gps_nmea_lib'
2025-02-23T18:22:32.6987688Z Submodule 'gps_teseo_lib' (https://github.com/jancumps/gps_teseo_lib.git) registered for path 'gps_teseo_lib'
2025-02-23T18:22:32.7014696Z Cloning into '/home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo/gps_nmea_lib'...
2025-02-23T18:22:33.1717359Z Cloning into '/home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo/gps_teseo_lib'...
2025-02-23T18:22:33.6253001Z Submodule path 'gps_nmea_lib': checked out '033cfe411ca3df33e3b1d271d9b4c9bd72ec37b2'
2025-02-23T18:22:33.6318828Z Submodule path 'gps_teseo_lib': checked out 'd24ba56ba182dce68071dbc8b710988e245ed4f6'
2025-02-23T18:22:33.6332430Z [command]/usr/bin/git submodule foreach git config --local gc.auto 0
2025-02-23T18:22:33.6549424Z Entering 'gps_nmea_lib'
2025-02-23T18:22:33.6573647Z Entering 'gps_teseo_lib'
2025-02-23T18:22:33.6605086Z ##[endgroup]
2025-02-23T18:22:33.6605861Z ##[group]Persisting credentials for submodules
2025-02-23T18:22:33.6611492Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'url\.https\:\/\/github\.com\/\.insteadOf' && git config --local --unset-all 'url.https://github.com/.insteadOf' || :"
2025-02-23T18:22:33.6824244Z Entering 'gps_nmea_lib'
2025-02-23T18:22:33.6867217Z Entering 'gps_teseo_lib'
2025-02-23T18:22:33.6922063Z [command]/usr/bin/git submodule foreach sh -c "git config --local 'http.https://github.com/.extraheader' 'AUTHORIZATION: basic ***' && git config --local --show-origin --name-only --get-regexp remote.origin.url"
2025-02-23T18:22:33.7134302Z Entering 'gps_nmea_lib'
2025-02-23T18:22:33.7172786Z file:/home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo/.git/modules/gps_nmea_lib/config	remote.origin.url
2025-02-23T18:22:33.7177405Z Entering 'gps_teseo_lib'
2025-02-23T18:22:33.7215952Z file:/home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo/.git/modules/gps_teseo_lib/config	remote.origin.url
2025-02-23T18:22:33.7247608Z [command]/usr/bin/git submodule foreach git config --local --add 'url.https://github.com/.insteadOf' 'git@github.com:'
2025-02-23T18:22:33.7462050Z Entering 'gps_nmea_lib'
2025-02-23T18:22:33.7485355Z Entering 'gps_teseo_lib'
2025-02-23T18:22:33.7522039Z [command]/usr/bin/git submodule foreach git config --local --add 'url.https://github.com/.insteadOf' 'org-5400863@github.com:'
2025-02-23T18:22:33.7737245Z Entering 'gps_nmea_lib'
2025-02-23T18:22:33.7760362Z Entering 'gps_teseo_lib'
2025-02-23T18:22:33.7790234Z ##[endgroup]
2025-02-23T18:22:33.7824890Z [command]/usr/bin/git log -1 --format=%H
2025-02-23T18:22:33.7846996Z 2479ca309986927c8ff327f8d2bb2586a76162b1
2025-02-23T18:22:33.7956729Z ##[group]Run sudo apt-get install ninja-build
2025-02-23T18:22:33.7957115Z sudo apt-get install ninja-build
2025-02-23T18:22:33.7957372Z 
2025-02-23T18:22:33.7957557Z sudo apt-get install cmake
2025-02-23T18:22:33.7957813Z sudo add-apt-repository universe
2025-02-23T18:22:33.7958069Z sudo apt update
2025-02-23T18:22:33.7958289Z sudo apt install gcc-14
2025-02-23T18:22:33.7958524Z gcc --version
2025-02-23T18:22:33.7958724Z whereis gcc
2025-02-23T18:22:33.7958912Z whereis gcc-14
2025-02-23T18:22:33.7959129Z ls -la /usr/bin | grep g++
2025-02-23T18:22:33.8016811Z shell: /usr/bin/bash -e {0}
2025-02-23T18:22:33.8017047Z ##[endgroup]
2025-02-23T18:22:33.9552053Z Reading package lists...
2025-02-23T18:22:34.1104810Z Building dependency tree...
2025-02-23T18:22:34.1117341Z Reading state information...
2025-02-23T18:22:34.2817201Z The following NEW packages will be installed:
2025-02-23T18:22:34.2818705Z   ninja-build
2025-02-23T18:22:34.2997531Z 0 upgraded, 1 newly installed, 0 to remove and 22 not upgraded.
2025-02-23T18:22:34.2997959Z Need to get 129 kB of archives.
2025-02-23T18:22:34.2998503Z After this operation, 364 kB of additional disk space will be used.
2025-02-23T18:22:34.2999329Z Get:1 file:/etc/apt/apt-mirrors.txt Mirrorlist [142 B]
2025-02-23T18:22:34.4018511Z Get:2 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 ninja-build amd64 1.11.1-2 [129 kB]
2025-02-23T18:22:34.6570877Z Fetched 129 kB in 0s (1105 kB/s)
2025-02-23T18:22:34.6813995Z Selecting previously unselected package ninja-build.
2025-02-23T18:22:34.7165691Z (Reading database ... 
2025-02-23T18:22:34.7166375Z (Reading database ... 5%
2025-02-23T18:22:34.7166907Z (Reading database ... 10%
2025-02-23T18:22:34.7167266Z (Reading database ... 15%
2025-02-23T18:22:34.7167606Z (Reading database ... 20%
2025-02-23T18:22:34.7167902Z (Reading database ... 25%
2025-02-23T18:22:34.7168144Z (Reading database ... 30%
2025-02-23T18:22:34.7168357Z (Reading database ... 35%
2025-02-23T18:22:34.7168560Z (Reading database ... 40%
2025-02-23T18:22:34.7168760Z (Reading database ... 45%
2025-02-23T18:22:34.7168954Z (Reading database ... 50%
2025-02-23T18:22:34.7424706Z (Reading database ... 55%
2025-02-23T18:22:34.7863982Z (Reading database ... 60%
2025-02-23T18:22:34.8264681Z (Reading database ... 65%
2025-02-23T18:22:34.8612886Z (Reading database ... 70%
2025-02-23T18:22:34.8971252Z (Reading database ... 75%
2025-02-23T18:22:34.9497935Z (Reading database ... 80%
2025-02-23T18:22:35.0288078Z (Reading database ... 85%
2025-02-23T18:22:35.1053919Z (Reading database ... 90%
2025-02-23T18:22:35.1730709Z (Reading database ... 95%
2025-02-23T18:22:35.1731117Z (Reading database ... 100%
2025-02-23T18:22:35.1731679Z (Reading database ... 220710 files and directories currently installed.)
2025-02-23T18:22:35.1775067Z Preparing to unpack .../ninja-build_1.11.1-2_amd64.deb ...
2025-02-23T18:22:35.1812608Z Unpacking ninja-build (1.11.1-2) ...
2025-02-23T18:22:35.2517289Z Setting up ninja-build (1.11.1-2) ...
2025-02-23T18:22:35.2558334Z Processing triggers for man-db (2.12.0-4build2) ...
2025-02-23T18:23:15.6471157Z 
2025-02-23T18:23:15.6471768Z Running kernel seems to be up-to-date.
2025-02-23T18:23:15.6472329Z 
2025-02-23T18:23:15.6472480Z No services need to be restarted.
2025-02-23T18:23:15.6472880Z 
2025-02-23T18:23:15.6475809Z No containers need to be restarted.
2025-02-23T18:23:15.6476118Z 
2025-02-23T18:23:15.6476299Z No user sessions are running outdated binaries.
2025-02-23T18:23:15.6476630Z 
2025-02-23T18:23:15.6476922Z No VM guests are running outdated hypervisor (qemu) binaries on this host.
2025-02-23T18:23:16.4127341Z Reading package lists...
2025-02-23T18:23:16.5427070Z Building dependency tree...
2025-02-23T18:23:16.5434508Z Reading state information...
2025-02-23T18:23:16.6757373Z The following additional packages will be installed:
2025-02-23T18:23:16.6762781Z   cmake-data libjsoncpp25 librhash0
2025-02-23T18:23:16.6768328Z Suggested packages:
2025-02-23T18:23:16.6768627Z   cmake-doc cmake-format elpa-cmake-mode
2025-02-23T18:23:16.6909090Z The following NEW packages will be installed:
2025-02-23T18:23:16.6915099Z   cmake cmake-data libjsoncpp25 librhash0
2025-02-23T18:23:16.7078533Z 0 upgraded, 4 newly installed, 0 to remove and 22 not upgraded.
2025-02-23T18:23:16.7079000Z Need to get 13.6 MB of archives.
2025-02-23T18:23:16.7079340Z After this operation, 49.1 MB of additional disk space will be used.
2025-02-23T18:23:16.7079734Z Get:1 file:/etc/apt/apt-mirrors.txt Mirrorlist [142 B]
2025-02-23T18:23:16.8081539Z Get:2 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libjsoncpp25 amd64 1.9.5-6build1 [82.8 kB]
2025-02-23T18:23:17.0656761Z Get:3 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 librhash0 amd64 1.4.3-3build1 [129 kB]
2025-02-23T18:23:17.2413601Z Get:4 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 cmake-data all 3.28.3-1build7 [2155 kB]
2025-02-23T18:23:17.5046146Z Get:5 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 cmake amd64 3.28.3-1build7 [11.2 MB]
2025-02-23T18:23:18.3387206Z Fetched 13.6 MB in 1s (9716 kB/s)
2025-02-23T18:23:18.3584919Z Selecting previously unselected package libjsoncpp25:amd64.
2025-02-23T18:23:18.3640039Z (Reading database ... 
2025-02-23T18:23:18.3640599Z (Reading database ... 5%
2025-02-23T18:23:18.3641154Z (Reading database ... 10%
2025-02-23T18:23:18.3641469Z (Reading database ... 15%
2025-02-23T18:23:18.3641697Z (Reading database ... 20%
2025-02-23T18:23:18.3642132Z (Reading database ... 25%
2025-02-23T18:23:18.3642345Z (Reading database ... 30%
2025-02-23T18:23:18.3642555Z (Reading database ... 35%
2025-02-23T18:23:18.3642791Z (Reading database ... 40%
2025-02-23T18:23:18.3642998Z (Reading database ... 45%
2025-02-23T18:23:18.3643199Z (Reading database ... 50%
2025-02-23T18:23:18.3725667Z (Reading database ... 55%
2025-02-23T18:23:18.3745750Z (Reading database ... 60%
2025-02-23T18:23:18.3777824Z (Reading database ... 65%
2025-02-23T18:23:18.3808433Z (Reading database ... 70%
2025-02-23T18:23:18.3825589Z (Reading database ... 75%
2025-02-23T18:23:18.3858243Z (Reading database ... 80%
2025-02-23T18:23:18.4022666Z (Reading database ... 85%
2025-02-23T18:23:18.4254953Z (Reading database ... 90%
2025-02-23T18:23:18.4330580Z (Reading database ... 95%
2025-02-23T18:23:18.4330950Z (Reading database ... 100%
2025-02-23T18:23:18.4331454Z (Reading database ... 220721 files and directories currently installed.)
2025-02-23T18:23:18.4372775Z Preparing to unpack .../libjsoncpp25_1.9.5-6build1_amd64.deb ...
2025-02-23T18:23:18.4400065Z Unpacking libjsoncpp25:amd64 (1.9.5-6build1) ...
2025-02-23T18:23:18.4685690Z Selecting previously unselected package librhash0:amd64.
2025-02-23T18:23:18.4819154Z Preparing to unpack .../librhash0_1.4.3-3build1_amd64.deb ...
2025-02-23T18:23:18.4833954Z Unpacking librhash0:amd64 (1.4.3-3build1) ...
2025-02-23T18:23:18.5150318Z Selecting previously unselected package cmake-data.
2025-02-23T18:23:18.5284001Z Preparing to unpack .../cmake-data_3.28.3-1build7_all.deb ...
2025-02-23T18:23:18.5426703Z Unpacking cmake-data (3.28.3-1build7) ...
2025-02-23T18:23:19.1094015Z Selecting previously unselected package cmake.
2025-02-23T18:23:19.1239816Z Preparing to unpack .../cmake_3.28.3-1build7_amd64.deb ...
2025-02-23T18:23:19.1250846Z Unpacking cmake (3.28.3-1build7) ...
2025-02-23T18:23:19.3275865Z Setting up libjsoncpp25:amd64 (1.9.5-6build1) ...
2025-02-23T18:23:19.3307552Z Setting up librhash0:amd64 (1.4.3-3build1) ...
2025-02-23T18:23:19.3337906Z Setting up cmake-data (3.28.3-1build7) ...
2025-02-23T18:23:19.3411777Z Setting up cmake (3.28.3-1build7) ...
2025-02-23T18:23:19.3447984Z Processing triggers for man-db (2.12.0-4build2) ...
2025-02-23T18:23:23.7155372Z Processing triggers for libc-bin (2.39-0ubuntu8.4) ...
2025-02-23T18:23:24.5530616Z 
2025-02-23T18:23:24.5531109Z Running kernel seems to be up-to-date.
2025-02-23T18:23:24.5531471Z 
2025-02-23T18:23:24.5531575Z No services need to be restarted.
2025-02-23T18:23:24.5531766Z 
2025-02-23T18:23:24.5532402Z No containers need to be restarted.
2025-02-23T18:23:24.5532621Z 
2025-02-23T18:23:24.5532753Z No user sessions are running outdated binaries.
2025-02-23T18:23:24.5532971Z 
2025-02-23T18:23:24.5533174Z No VM guests are running outdated hypervisor (qemu) binaries on this host.
2025-02-23T18:23:25.8018416Z Get:1 file:/etc/apt/apt-mirrors.txt Mirrorlist [142 B]
2025-02-23T18:23:25.8354025Z Hit:2 http://azure.archive.ubuntu.com/ubuntu noble InRelease
2025-02-23T18:23:25.8355948Z Hit:6 https://packages.microsoft.com/repos/azure-cli noble InRelease
2025-02-23T18:23:25.8384857Z Get:3 http://azure.archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
2025-02-23T18:23:25.8397537Z Get:7 https://packages.microsoft.com/ubuntu/24.04/prod noble InRelease [3600 B]
2025-02-23T18:23:25.8433909Z Get:4 http://azure.archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB]
2025-02-23T18:23:25.8474476Z Get:5 http://azure.archive.ubuntu.com/ubuntu noble-security InRelease [126 kB]
2025-02-23T18:23:25.9929819Z Get:8 https://packages.microsoft.com/ubuntu/24.04/prod noble/main amd64 Packages [21.5 kB]
2025-02-23T18:23:26.0041341Z Get:9 https://packages.microsoft.com/ubuntu/24.04/prod noble/main armhf Packages [6867 B]
2025-02-23T18:23:26.0069070Z Get:10 https://packages.microsoft.com/ubuntu/24.04/prod noble/main arm64 Packages [13.3 kB]
2025-02-23T18:23:26.0414026Z Get:11 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [866 kB]
2025-02-23T18:23:26.0473275Z Get:12 http://azure.archive.ubuntu.com/ubuntu noble-updates/main Translation-en [196 kB]
2025-02-23T18:23:26.0499596Z Get:13 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 Components [150 kB]
2025-02-23T18:23:26.0523250Z Get:14 http://azure.archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [1015 kB]
2025-02-23T18:23:26.0595418Z Get:15 http://azure.archive.ubuntu.com/ubuntu noble-updates/universe Translation-en [254 kB]
2025-02-23T18:23:26.0628597Z Get:16 http://azure.archive.ubuntu.com/ubuntu noble-updates/universe amd64 Components [363 kB]
2025-02-23T18:23:26.0662329Z Get:17 http://azure.archive.ubuntu.com/ubuntu noble-updates/restricted amd64 Components [212 B]
2025-02-23T18:23:26.0679575Z Get:18 http://azure.archive.ubuntu.com/ubuntu noble-updates/multiverse amd64 Components [940 B]
2025-02-23T18:23:26.0968211Z Get:19 http://azure.archive.ubuntu.com/ubuntu noble-backports/main amd64 Components [208 B]
2025-02-23T18:23:26.0984240Z Get:20 http://azure.archive.ubuntu.com/ubuntu noble-backports/universe amd64 Packages [14.2 kB]
2025-02-23T18:23:26.1491095Z Get:21 http://azure.archive.ubuntu.com/ubuntu noble-backports/universe Translation-en [12.1 kB]
2025-02-23T18:23:26.1492418Z Get:22 http://azure.archive.ubuntu.com/ubuntu noble-backports/universe amd64 Components [20.0 kB]
2025-02-23T18:23:26.1493127Z Get:23 http://azure.archive.ubuntu.com/ubuntu noble-backports/restricted amd64 Components [216 B]
2025-02-23T18:23:26.1493839Z Get:24 http://azure.archive.ubuntu.com/ubuntu noble-backports/multiverse amd64 Components [212 B]
2025-02-23T18:23:26.1516971Z Get:25 http://azure.archive.ubuntu.com/ubuntu noble-security/main amd64 Packages [618 kB]
2025-02-23T18:23:26.1564695Z Get:26 http://azure.archive.ubuntu.com/ubuntu noble-security/main Translation-en [118 kB]
2025-02-23T18:23:26.1582450Z Get:27 http://azure.archive.ubuntu.com/ubuntu noble-security/main amd64 Components [9008 B]
2025-02-23T18:23:26.1597252Z Get:28 http://azure.archive.ubuntu.com/ubuntu noble-security/universe amd64 Packages [804 kB]
2025-02-23T18:23:26.1648650Z Get:29 http://azure.archive.ubuntu.com/ubuntu noble-security/universe Translation-en [172 kB]
2025-02-23T18:23:26.1690964Z Get:30 http://azure.archive.ubuntu.com/ubuntu noble-security/universe amd64 Components [51.9 kB]
2025-02-23T18:23:26.1705310Z Get:31 http://azure.archive.ubuntu.com/ubuntu noble-security/restricted amd64 Components [212 B]
2025-02-23T18:23:26.1746433Z Get:32 http://azure.archive.ubuntu.com/ubuntu noble-security/multiverse amd64 Components [212 B]
2025-02-23T18:23:30.6080611Z Fetched 5089 kB in 1s (6711 kB/s)
2025-02-23T18:23:31.2133476Z Reading package lists...
2025-02-23T18:23:31.2224008Z Adding component(s) 'universe' to all repositories.
2025-02-23T18:23:31.2600021Z 
2025-02-23T18:23:31.2600462Z WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
2025-02-23T18:23:31.2600797Z 
2025-02-23T18:23:31.3267129Z Get:1 file:/etc/apt/apt-mirrors.txt Mirrorlist [142 B]
2025-02-23T18:23:31.3623280Z Hit:2 http://azure.archive.ubuntu.com/ubuntu noble InRelease
2025-02-23T18:23:31.3624515Z Hit:6 https://packages.microsoft.com/repos/azure-cli noble InRelease
2025-02-23T18:23:31.3634185Z Hit:7 https://packages.microsoft.com/ubuntu/24.04/prod noble InRelease
2025-02-23T18:23:31.3635809Z Hit:3 http://azure.archive.ubuntu.com/ubuntu noble-updates InRelease
2025-02-23T18:23:31.3654437Z Hit:4 http://azure.archive.ubuntu.com/ubuntu noble-backports InRelease
2025-02-23T18:23:31.3695022Z Hit:5 http://azure.archive.ubuntu.com/ubuntu noble-security InRelease
2025-02-23T18:23:32.4006995Z Reading package lists...
2025-02-23T18:23:32.5321790Z Building dependency tree...
2025-02-23T18:23:32.5328331Z Reading state information...
2025-02-23T18:23:32.5457736Z 42 packages can be upgraded. Run 'apt list --upgradable' to see them.
2025-02-23T18:23:32.5570316Z 
2025-02-23T18:23:32.5570750Z WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
2025-02-23T18:23:32.5571252Z 
2025-02-23T18:23:32.5696999Z Reading package lists...
2025-02-23T18:23:32.6983132Z Building dependency tree...
2025-02-23T18:23:32.6991189Z Reading state information...
2025-02-23T18:23:32.8432676Z gcc-14 is already the newest version (14.2.0-4ubuntu2~24.04).
2025-02-23T18:23:32.8433082Z gcc-14 set to manually installed.
2025-02-23T18:23:32.8766076Z 0 upgraded, 0 newly installed, 0 to remove and 42 not upgraded.
2025-02-23T18:23:32.9100914Z gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
2025-02-23T18:23:32.9101314Z Copyright (C) 2023 Free Software Foundation, Inc.
2025-02-23T18:23:32.9102336Z This is free software; see the source for copying conditions.  There is NO
2025-02-23T18:23:32.9103150Z warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2025-02-23T18:23:32.9103643Z 
2025-02-23T18:23:32.9708503Z gcc: /usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc /usr/share/gcc /usr/share/man/man1/gcc.1.gz
2025-02-23T18:23:32.9855807Z gcc-14: /usr/bin/gcc-14 /usr/share/man/man1/gcc-14.1.gz
2025-02-23T18:23:33.0088154Z lrwxrwxrwx  1 root root           25 May 27  2024 clang++ -> /etc/alternatives/clang++
2025-02-23T18:23:33.0088992Z lrwxrwxrwx  1 root root           26 Apr 14  2024 clang++-16 -> ../lib/llvm-16/bin/clang++
2025-02-23T18:23:33.0090039Z lrwxrwxrwx  1 root root           26 Apr 14  2024 clang++-17 -> ../lib/llvm-17/bin/clang++
2025-02-23T18:23:33.0090495Z lrwxrwxrwx  1 root root           26 May 27  2024 clang++-18 -> ../lib/llvm-18/bin/clang++
2025-02-23T18:23:33.0090916Z lrwxrwxrwx  1 root root            6 Jan 31  2024 g++ -> g++-13
2025-02-23T18:23:33.0091340Z lrwxrwxrwx  1 root root           23 Apr  3  2024 g++-12 -> x86_64-linux-gnu-g++-12
2025-02-23T18:23:33.0091762Z lrwxrwxrwx  1 root root           23 Sep  4 14:44 g++-13 -> x86_64-linux-gnu-g++-13
2025-02-23T18:23:33.0092647Z lrwxrwxrwx  1 root root           23 Sep  9 13:21 g++-14 -> x86_64-linux-gnu-g++-14
2025-02-23T18:23:33.0093409Z lrwxrwxrwx  1 root root           23 Jan 31  2024 x86_64-linux-gnu-g++ -> x86_64-linux-gnu-g++-13
2025-02-23T18:23:33.0093984Z -rwxr-xr-x  1 root root      1396008 Apr  3  2024 x86_64-linux-gnu-g++-12
2025-02-23T18:23:33.0094665Z -rwxr-xr-x  1 root root      1027128 Sep  4 14:44 x86_64-linux-gnu-g++-13
2025-02-23T18:23:33.0095041Z -rwxr-xr-x  1 root root      1186944 Sep  9 13:21 x86_64-linux-gnu-g++-14
2025-02-23T18:23:33.0123581Z ##[group]Run echo refs/pull/167/merge
2025-02-23T18:23:33.0123906Z echo refs/pull/167/merge
2025-02-23T18:23:33.0124145Z mkdir build
2025-02-23T18:23:33.0124339Z cd build
2025-02-23T18:23:33.0125178Z cmake .. -G "Ninja" -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/x86_64-linux-gnu-gcc-14 -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/x86_64-linux-gnu-g++-14 -DCMAKE_BUILD_TYPE=Release -DPATH_TO_LIBS=pico_gps_teseo
2025-02-23T18:23:33.0126054Z cmake --build .
2025-02-23T18:23:33.0126258Z cd ..
2025-02-23T18:23:33.0184999Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2025-02-23T18:23:33.0185326Z ##[endgroup]
2025-02-23T18:23:33.0257254Z refs/pull/167/merge
2025-02-23T18:23:35.0330293Z -- The C compiler identification is GNU 14.2.0
2025-02-23T18:23:36.4251756Z -- The CXX compiler identification is GNU 14.2.0
2025-02-23T18:23:36.4457384Z -- The ASM compiler identification is GNU
2025-02-23T18:23:36.4475628Z -- Found assembler: /usr/bin/x86_64-linux-gnu-gcc-14
2025-02-23T18:23:36.5315421Z -- Detecting C compiler ABI info
2025-02-23T18:23:36.7989221Z -- Detecting C compiler ABI info - done
2025-02-23T18:23:36.8154433Z -- Check for working C compiler: /usr/bin/x86_64-linux-gnu-gcc-14 - skipped
2025-02-23T18:23:36.8206670Z -- Detecting C compile features
2025-02-23T18:23:36.8251360Z -- Detecting C compile features - done
2025-02-23T18:23:36.8521008Z -- Detecting CXX compiler ABI info
2025-02-23T18:23:37.0441747Z -- Detecting CXX compiler ABI info - done
2025-02-23T18:23:37.0611498Z -- Check for working CXX compiler: /usr/bin/x86_64-linux-gnu-g++-14 - skipped
2025-02-23T18:23:37.0615801Z -- Detecting CXX compile features
2025-02-23T18:23:37.0623833Z -- Detecting CXX compile features - done
2025-02-23T18:23:37.1012985Z library source path=pico_gps_teseo
2025-02-23T18:23:37.9806581Z CMake Deprecation Warning at build/_deps/googletest-src/CMakeLists.txt:4 (cmake_minimum_required):
2025-02-23T18:23:37.9807333Z   Compatibility with CMake < 3.10 will be removed from a future version of
2025-02-23T18:23:37.9807697Z   CMake.
2025-02-23T18:23:37.9807806Z 
2025-02-23T18:23:37.9808122Z   Update the VERSION argument <min> value.  Or, use the <min>...<max> syntax
2025-02-23T18:23:37.9808611Z   to tell CMake that the project requires at least <min> but has been updated
2025-02-23T18:23:37.9809023Z   to work with policies introduced by <max> or earlier.
2025-02-23T18:23:37.9809238Z 
2025-02-23T18:23:37.9809242Z 
2025-02-23T18:23:37.9924408Z CMake Deprecation Warning at build/_deps/googletest-src/googlemock/CMakeLists.txt:39 (cmake_minimum_required):
2025-02-23T18:23:37.9925057Z   Compatibility with CMake < 3.10 will be removed from a future version of
2025-02-23T18:23:37.9925426Z   CMake.
2025-02-23T18:23:37.9925524Z 
2025-02-23T18:23:37.9925721Z   Update the VERSION argument <min> value.  Or, use the <min>...<max> syntax
2025-02-23T18:23:37.9926414Z   to tell CMake that the project requires at least <min> but has been updated
2025-02-23T18:23:37.9926823Z   to work with policies introduced by <max> or earlier.
2025-02-23T18:23:37.9927033Z 
2025-02-23T18:23:37.9927043Z 
2025-02-23T18:23:37.9933339Z CMake Deprecation Warning at build/_deps/googletest-src/googletest/CMakeLists.txt:49 (cmake_minimum_required):
2025-02-23T18:23:37.9934148Z   Compatibility with CMake < 3.10 will be removed from a future version of
2025-02-23T18:23:37.9934498Z   CMake.
2025-02-23T18:23:37.9934593Z 
2025-02-23T18:23:37.9934777Z   Update the VERSION argument <min> value.  Or, use the <min>...<max> syntax
2025-02-23T18:23:37.9935239Z   to tell CMake that the project requires at least <min> but has been updated
2025-02-23T18:23:37.9935638Z   to work with policies introduced by <max> or earlier.
2025-02-23T18:23:37.9935859Z 
2025-02-23T18:23:37.9935863Z 
2025-02-23T18:23:38.1883726Z -- Found Python: /usr/bin/python3.12 (found version "3.12.3") found components: Interpreter
2025-02-23T18:23:38.2080922Z -- Performing Test CMAKE_HAVE_LIBC_PTHREAD
2025-02-23T18:23:38.4971037Z -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
2025-02-23T18:23:38.4980923Z -- Found Threads: TRUE
2025-02-23T18:23:38.5533574Z -- Configuring done (5.2s)
2025-02-23T18:23:38.5742112Z -- Generating done (0.0s)
2025-02-23T18:23:38.5747429Z -- Build files have been written to: /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/build
2025-02-23T18:23:39.0799861Z [1/24] Scanning /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo/gps_teseo_lib/callbackmanager/callbackmanager.cpp for CXX dependencies
2025-02-23T18:23:39.0824063Z [2/24] Scanning /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo/gps_teseo_lib/teseo/teseo_iface.cpp for CXX dependencies
2025-02-23T18:23:39.0900366Z [3/24] Scanning /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo/gps_teseo_lib/teseo/teseo.cpp for CXX dependencies
2025-02-23T18:23:39.2852569Z [4/24] Scanning /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo/gps_nmea_lib/nmea/nmea_iface.cpp for CXX dependencies
2025-02-23T18:23:39.2878848Z [5/24] Scanning /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo/gps_nmea_lib/nmea/nmea.cpp for CXX dependencies
2025-02-23T18:23:39.5523453Z [6/24] Scanning /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/test/gps_teseo_lib/test_gps_teseo_lib.cpp for CXX dependencies
2025-02-23T18:23:39.5596466Z [7/24] Scanning /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/test/gps_nmea_lib/test_gps_nmea_lib.cpp for CXX dependencies
2025-02-23T18:23:39.5643617Z [8/24] Generating CXX dyndep file CMakeFiles/test_class_module.dir/CXX.dd
2025-02-23T18:23:40.8238654Z [9/24] Building CXX object CMakeFiles/test_class_module.dir/pico_gps_teseo/gps_teseo_lib/callbackmanager/callbackmanager.cpp.o
2025-02-23T18:23:42.0081544Z [10/24] Building CXX object CMakeFiles/test_class_module.dir/pico_gps_teseo/gps_teseo_lib/teseo/teseo_iface.cpp.o
2025-02-23T18:23:42.4294169Z [11/24] Building CXX object _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o
2025-02-23T18:23:43.0440964Z [12/24] Building CXX object _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o
2025-02-23T18:23:43.1797877Z [13/24] Building CXX object CMakeFiles/test_class_module.dir/pico_gps_teseo/gps_nmea_lib/nmea/nmea_iface.cpp.o
2025-02-23T18:23:43.9770387Z [14/24] Building CXX object CMakeFiles/test_class_module.dir/pico_gps_teseo/gps_teseo_lib/teseo/teseo.cpp.o
2025-02-23T18:23:45.6815111Z [15/24] Building CXX object CMakeFiles/test_class_module.dir/test/gps_teseo_lib/test_gps_teseo_lib.cpp.o
2025-02-23T18:23:46.5507169Z [16/24] Building CXX object CMakeFiles/test_class_module.dir/pico_gps_teseo/gps_nmea_lib/nmea/nmea.cpp.o
2025-02-23T18:23:47.2620634Z [17/24] Building CXX object _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o
2025-02-23T18:23:48.5228972Z [18/24] Building CXX object CMakeFiles/test_class_module.dir/test/gps_nmea_lib/test_gps_nmea_lib.cpp.o
2025-02-23T18:23:52.6378075Z [19/24] Building CXX object _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
2025-02-23T18:23:53.2247085Z [20/24] Linking CXX static library lib/libgtest.a
2025-02-23T18:23:53.3026525Z [21/24] Linking CXX static library lib/libgtest_main.a
2025-02-23T18:23:53.3042865Z [22/24] Linking CXX static library lib/libgmock.a
2025-02-23T18:23:53.3818693Z [23/24] Linking CXX static library lib/libgmock_main.a
2025-02-23T18:23:53.4549613Z [24/24] Linking CXX executable test_class_module
2025-02-23T18:23:53.4589695Z ##[group]Run cd build
2025-02-23T18:23:53.4589957Z cd build
2025-02-23T18:23:53.4590165Z chmod +x ./test_class_module
2025-02-23T18:23:53.4590415Z ./test_class_module
2025-02-23T18:23:53.4590629Z cd ..
2025-02-23T18:23:53.4646561Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2025-02-23T18:23:53.4647084Z ##[endgroup]
2025-02-23T18:23:53.4742656Z Running main() from /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/build/_deps/googletest-src/googletest/src/gtest_main.cc
2025-02-23T18:23:53.4743629Z [==========] Running 27 tests from 6 test suites.
2025-02-23T18:23:53.4744067Z [----------] Global test environment set-up.
2025-02-23T18:23:53.4744325Z [----------] 6 tests from gllTest
2025-02-23T18:23:53.4744558Z [ RUN      ] gllTest.parse
2025-02-23T18:23:53.4744814Z [       OK ] gllTest.parse (0 ms)
2025-02-23T18:23:53.4745053Z [ RUN      ] gllTest.source
2025-02-23T18:23:53.4745320Z [       OK ] gllTest.source (0 ms)
2025-02-23T18:23:53.4745727Z [ RUN      ] gllTest.lat
2025-02-23T18:23:53.4746084Z [       OK ] gllTest.lat (0 ms)
2025-02-23T18:23:53.4746450Z [ RUN      ] gllTest.lon
2025-02-23T18:23:53.4746783Z [       OK ] gllTest.lon (0 ms)
2025-02-23T18:23:53.4747133Z [ RUN      ] gllTest.time
2025-02-23T18:23:53.4747474Z [       OK ] gllTest.time (0 ms)
2025-02-23T18:23:53.4747849Z [ RUN      ] gllTest.valid
2025-02-23T18:23:53.4748213Z [       OK ] gllTest.valid (0 ms)
2025-02-23T18:23:53.4748652Z [----------] 6 tests from gllTest (0 ms total)
2025-02-23T18:23:53.4748863Z 
2025-02-23T18:23:53.4749009Z [----------] 9 tests from ggaTest
2025-02-23T18:23:53.4749387Z [ RUN      ] ggaTest.parse
2025-02-23T18:23:53.4749741Z [       OK ] ggaTest.parse (0 ms)
2025-02-23T18:23:53.4750125Z [ RUN      ] ggaTest.source
2025-02-23T18:23:53.4750384Z [       OK ] ggaTest.source (0 ms)
2025-02-23T18:23:53.4750608Z [ RUN      ] ggaTest.lat
2025-02-23T18:23:53.4750810Z [       OK ] ggaTest.lat (0 ms)
2025-02-23T18:23:53.4751028Z [ RUN      ] ggaTest.lon
2025-02-23T18:23:53.4751218Z [       OK ] ggaTest.lon (0 ms)
2025-02-23T18:23:53.4751424Z [ RUN      ] ggaTest.time
2025-02-23T18:23:53.4751628Z [       OK ] ggaTest.time (0 ms)
2025-02-23T18:23:53.4752052Z [ RUN      ] ggaTest.sats
2025-02-23T18:23:53.4752333Z [       OK ] ggaTest.sats (0 ms)
2025-02-23T18:23:53.4752539Z [ RUN      ] ggaTest.qual
2025-02-23T18:23:53.4752742Z [       OK ] ggaTest.qual (0 ms)
2025-02-23T18:23:53.4752946Z [ RUN      ] ggaTest.alt
2025-02-23T18:23:53.4753141Z [       OK ] ggaTest.alt (0 ms)
2025-02-23T18:23:53.4753342Z [ RUN      ] ggaTest.geosep
2025-02-23T18:23:53.4753552Z [       OK ] ggaTest.geosep (0 ms)
2025-02-23T18:23:53.4753792Z [----------] 9 tests from ggaTest (0 ms total)
2025-02-23T18:23:53.4753974Z 
2025-02-23T18:23:53.4754052Z [----------] 1 test from teseoTest
2025-02-23T18:23:53.4754298Z [ RUN      ] teseoTest.parse_multiline_reply
2025-02-23T18:23:53.4754596Z [       OK ] teseoTest.parse_multiline_reply (0 ms)
2025-02-23T18:23:53.4754881Z [----------] 1 test from teseoTest (0 ms total)
2025-02-23T18:23:53.4755061Z 
2025-02-23T18:23:53.4755170Z [----------] 4 tests from parsetest/gllParserTest
2025-02-23T18:23:53.4755469Z [ RUN      ] parsetest/gllParserTest.gllparsetest/0
2025-02-23T18:23:53.4755783Z [       OK ] parsetest/gllParserTest.gllparsetest/0 (0 ms)
2025-02-23T18:23:53.4756094Z [ RUN      ] parsetest/gllParserTest.gllparsetest/1
2025-02-23T18:23:53.4756593Z [       OK ] parsetest/gllParserTest.gllparsetest/1 (0 ms)
2025-02-23T18:23:53.4756891Z [ RUN      ] parsetest/gllParserTest.gllparsetest/2
2025-02-23T18:23:53.4757181Z [       OK ] parsetest/gllParserTest.gllparsetest/2 (0 ms)
2025-02-23T18:23:53.4757475Z [ RUN      ] parsetest/gllParserTest.gllparsetest/3
2025-02-23T18:23:53.4757764Z [       OK ] parsetest/gllParserTest.gllparsetest/3 (0 ms)
2025-02-23T18:23:53.4758083Z [----------] 4 tests from parsetest/gllParserTest (0 ms total)
2025-02-23T18:23:53.4758290Z 
2025-02-23T18:23:53.4758587Z [----------] 3 tests from parsetest/ggaParserTest
2025-02-23T18:23:53.4758873Z [ RUN      ] parsetest/ggaParserTest.ggaparsetest/0
2025-02-23T18:23:53.4759169Z [       OK ] parsetest/ggaParserTest.ggaparsetest/0 (0 ms)
2025-02-23T18:23:53.4759462Z [ RUN      ] parsetest/ggaParserTest.ggaparsetest/1
2025-02-23T18:23:53.4759752Z [       OK ] parsetest/ggaParserTest.ggaparsetest/1 (0 ms)
2025-02-23T18:23:53.4760037Z [ RUN      ] parsetest/ggaParserTest.ggaparsetest/2
2025-02-23T18:23:53.4760339Z [       OK ] parsetest/ggaParserTest.ggaparsetest/2 (0 ms)
2025-02-23T18:23:53.4760649Z [----------] 3 tests from parsetest/ggaParserTest (0 ms total)
2025-02-23T18:23:53.4760849Z 
2025-02-23T18:23:53.4760953Z [----------] 4 tests from parsetest/gsaParserTest
2025-02-23T18:23:53.4761231Z [ RUN      ] parsetest/gsaParserTest.gsaparsetest/0
2025-02-23T18:23:53.4761529Z [       OK ] parsetest/gsaParserTest.gsaparsetest/0 (0 ms)
2025-02-23T18:23:53.4762118Z [ RUN      ] parsetest/gsaParserTest.gsaparsetest/1
2025-02-23T18:23:53.4762459Z [       OK ] parsetest/gsaParserTest.gsaparsetest/1 (0 ms)
2025-02-23T18:23:53.4762821Z [ RUN      ] parsetest/gsaParserTest.gsaparsetest/2
2025-02-23T18:23:53.4763121Z [       OK ] parsetest/gsaParserTest.gsaparsetest/2 (0 ms)
2025-02-23T18:23:53.4763420Z [ RUN      ] parsetest/gsaParserTest.gsaparsetest/3
2025-02-23T18:23:53.4763714Z [       OK ] parsetest/gsaParserTest.gsaparsetest/3 (0 ms)
2025-02-23T18:23:53.4764024Z [----------] 4 tests from parsetest/gsaParserTest (0 ms total)
2025-02-23T18:23:53.4764230Z 
2025-02-23T18:23:53.4764330Z [----------] Global test environment tear-down
2025-02-23T18:23:53.4764605Z [==========] 27 tests from 6 test suites ran. (0 ms total)
2025-02-23T18:23:53.4764866Z [  PASSED  ] 27 tests.
2025-02-23T18:23:53.4835821Z Post job cleanup.
2025-02-23T18:23:53.5759575Z [command]/usr/bin/git version
2025-02-23T18:23:53.5796227Z git version 2.48.1
2025-02-23T18:23:53.5839936Z Temporarily overriding HOME='/home/runner/work/_temp/f15bebd3-b84e-4644-8057-b070c8add181' before making global git config changes
2025-02-23T18:23:53.5841199Z Adding repository directory to the temporary git global config as a safe directory
2025-02-23T18:23:53.5853608Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo/pico_gps_teseo
2025-02-23T18:23:53.5887571Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2025-02-23T18:23:53.5919777Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2025-02-23T18:23:53.6135155Z Entering 'gps_nmea_lib'
2025-02-23T18:23:53.6178534Z Entering 'gps_teseo_lib'
2025-02-23T18:23:53.6237502Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2025-02-23T18:23:53.6258705Z http.https://github.com/.extraheader
2025-02-23T18:23:53.6270010Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2025-02-23T18:23:53.6299832Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2025-02-23T18:23:53.6512499Z Entering 'gps_nmea_lib'
2025-02-23T18:23:53.6536122Z http.https://github.com/.extraheader
2025-02-23T18:23:53.6570288Z Entering 'gps_teseo_lib'
2025-02-23T18:23:53.6596235Z http.https://github.com/.extraheader
2025-02-23T18:23:53.6775007Z Post job cleanup.
2025-02-23T18:23:53.7714337Z [command]/usr/bin/git version
2025-02-23T18:23:53.7755110Z git version 2.48.1
2025-02-23T18:23:53.7799648Z Temporarily overriding HOME='/home/runner/work/_temp/d9ecdca1-939c-4266-b6f5-8f9d95758a4d' before making global git config changes
2025-02-23T18:23:53.7800909Z Adding repository directory to the temporary git global config as a safe directory
2025-02-23T18:23:53.7814077Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/pico_gps_teseo/pico_gps_teseo/test_gps_teseo
2025-02-23T18:23:53.7850885Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2025-02-23T18:23:53.7885095Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2025-02-23T18:23:53.8123989Z Entering 'source/gps_nmea_lib'
2025-02-23T18:23:53.8169495Z Entering 'source/gps_teseo_lib'
2025-02-23T18:23:53.8229698Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2025-02-23T18:23:53.8252455Z http.https://github.com/.extraheader
2025-02-23T18:23:53.8264887Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2025-02-23T18:23:53.8297764Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2025-02-23T18:23:53.8527100Z Entering 'source/gps_nmea_lib'
2025-02-23T18:23:53.8551638Z http.https://github.com/.extraheader
2025-02-23T18:23:53.8585591Z Entering 'source/gps_teseo_lib'
2025-02-23T18:23:53.8609925Z http.https://github.com/.extraheader
2025-02-23T18:23:53.8757842Z Cleaning up orphan processes

The Badge

GitHub can create a badge for actions. They can be placed on a website, in the readme, or other places that accept markdown.

image

Here's an example where the badge appears on DoxyGen generated documentation pages.

Why?

Automatically run unit tests on pull requests to protected branches, allows that:

  • developers can check-in their code as often as they want. even if it's broken
  • they can run the unit tests on their code if they want to. Either from GitHub or from a VSCode plugin
  • they can only successfully complete a pull request of their changes to the protected branches if the unit tests succeed. Failed test blocks pull requests and notifies repository followers.
  • the project can publish latest pull request status using badges.

link to all posts.

  • Sign in to reply
  • Cancel

Top Replies

  • BigG
    BigG 6 months ago +2
    Interesting blogs. I've enjoyed learning something new. In fact, your blogs have unexpectedly taken me down a new rabbit hole (triggered by random searches), which I never knew it existed. Namely Google…
  • Jan Cumps
    Jan Cumps 6 months ago +2
    Today I learned that the combination of unit testing and GitHub actions can reveal defects. I was making test scenarios for an object oriented callback manager ( C++ callbacks and templates ). The tests…
  • DAB
    DAB 6 months ago +1
    Nice blogs Jan.
Parents
  • Jan Cumps
    Jan Cumps 6 months ago

    Today I learned that the combination of unit testing and GitHub actions can reveal defects.

    I was making test scenarios for an object oriented callback manager ( C++ callbacks and templates ). The tests succeed on my Windows install with gcc 14.
    When I run it on an ubuntu test runner, I see that it throws memory segmentation faults:

    image

    A good opportunity (and tools setup) to validate my callback manager design ...

    These are the test cases:

    #include <gtest/gtest.h>
    
    import callbackmanager;
    
    // scenario: call object method
    TEST(callback, objectMethod) {
        class MyClass {
        public:
            inline int handler(const int& num1, const int& num2) const {
                return num1 + num2;
            }
        };
    
        MyClass myClass;
    
        callbackmanager::Callback<int, const int&, const int&> cb;
        // Use a lambda to capture myClass and call the object method
        cb.set([&myClass](const int& num1, const int& num2) -> int {
            return myClass.handler(num1, num2);
        });    
        ASSERT_EQ(cb.call(4, 5), 9);
        ASSERT_NE(cb.call(4, 5), 8);
    }
    
    // scenario: call static method
    TEST(callback, classStaticMethod) {
        class MyClass {
        public:
            static inline int staticHandler(const int& num1, const int& num2) {
                return num1 + num2;
            }
        };
    
    	callbackmanager::Callback<int, const int&, const int&> cb;
        // Use a lambda to call the static method
        cb.set([](const int& num1, const int& num2) -> int {
            return MyClass::staticHandler(num1, num2);
        });
        ASSERT_EQ(cb.call(4, 5), 9);
        ASSERT_NE(cb.call(4, 5), 8);
    }
    
    // scenario: call C function
    int functionHandler(const int& num1, const int& num2) {
        return num1 + num2;
    }
    
    TEST(callback, cFunction) {
        callbackmanager::Callback<int, const int&, const int&> cb;
        // Use a lambda to call the classic C function
        cb.set([](const int& num1, const int& num2) -> int {
            return functionHandler(num1, num2);
        });
        ASSERT_EQ(cb.call(4, 5), 9);
        ASSERT_NE(cb.call(4, 5), 8);
    }
    
    // scenario: call pure lambda
    TEST(callback, lambda) {
    	callbackmanager::Callback<int, const int&, const int&> cb;
        // Use a lambda to execute anonymous C code
        cb.set([](const int& num1, const int& num2) -> int {
            return num1 + num2;
        });
        ASSERT_EQ(cb.call(4, 5), 9);
        ASSERT_NE(cb.call(4, 5), 8);
    }
    
    // scenario: return a bool
    TEST(callback, bool) {
    	callbackmanager::Callback<bool, const int&, const int&> cb;
        // Use a lambda to execute anonymous C code
        cb.set([](const int& num1, const int& num2) -> bool {
            return num1 == num2;
        });
    	ASSERT_TRUE(cb.call(1, 1));
    	ASSERT_FALSE(cb.call(1, 2));
    }
    
    // scenario: use void, and no attributes
    TEST(callback, voidWithoutParameters) {
    	callbackmanager::Callback<void> cb;
        // Use a lambda to execute anonymous C code
        bool called = false;
        cb.set([&called]() {
            called = true;
            return;
        });
        cb.call();
        ASSERT_TRUE(called);
    }
    
    // scenario: use void, and a const std::string reference
    TEST(callback, voidWithConstParameter) {
        callbackmanager::Callback<void, const std::string&> cb;
        // Use a lambda to execute anonymous C code
        cb.set([](const std::string& s) {
            ASSERT_STREQ(s.c_str(), "test");
            return;
        });
        cb.call("test");
    }    
    
    // scenario: no handler
    TEST(callback, noHandler) {
    	callbackmanager::Callback<void> cb;
        ASSERT_FALSE(cb.is_set());
        cb.call();
        ASSERT_TRUE(true); // call without callback should succeed
    }    
    
    // scenario: set and unset
    TEST(callback, setUnset) {
    	callbackmanager::Callback<void> cb;
        ASSERT_FALSE(cb.is_set());
        // Use a lambda to execute anonymous C code
        cb.set([]() {
            return;
        });
        ASSERT_TRUE(cb.is_set());
        cb.unset();
        ASSERT_FALSE(cb.is_set());
    }    

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Cancel
  • Jan Cumps
    Jan Cumps 6 months ago in reply to Jan Cumps

    I installed a fresh linux on a laptop here, with the same toolchain. I found out that my callbackmanager works when compiled with debug config, but not with release config.

    cmake .. -G "Ninja" -DCMAKE_TOOLCHAIN_FILE=/home/jancumps/develop/cmake/toolchain-gcc-14.0.2.txt -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE=Release
    cmake --build .
    ./callbackmanager
    Segmentation fault

    cmake .. -G "Ninja" -DCMAKE_TOOLCHAIN_FILE=/home/jancumps/develop/cmake/toolchain-gcc-14.0.2.txt -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE=Debug
    cmake --build .
    ./callbackmanager
    Value: 9
    Value: 9
    Value: 9
    Value: 9
    Value: false
    void gets num1: 4, num2: 5
    void with no parameters
    hello, world!
    hello, world!


    I'm going to check what construct I'm using, that's causing this. I suspect that the linker optimises out the callbacks, because they are indirectly called.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Jan Cumps
    Jan Cumps 6 months ago in reply to Jan Cumps

    Narrowed down to COMPILE optimization level.

    Code works from -O0 to -02. Fails at -03

    Here is how I can set the optimisation level in CMake. Now I need a way to find how I can only do that for Release compilation:

    target_compile_options(${CMAKE_PROJECT_NAME}_example
            PUBLIC "-O2"
    )
    Once I have that working, I'll check how I can prevent -O3 from culling the callbacks ...
    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Jan Cumps
    Jan Cumps 6 months ago in reply to Jan Cumps

    I found a way to solve that the compiler optimizes out callback functions when optimization is on:

    Put this compiler directive in front of the function that sets the callbacks:

    __attribute__((optimize(0))) 

    example:

    __attribute__((optimize(0))) 
    void setCallbacks() {
        gps.writer().set([](const std::string& s) -> void { write(s); });
        gps.reader().set([](std::string& s) -> void { read(s); });
        gps.resetter().set([]() -> void { port_pico::reset(); });
    }
    
    int main() {
        initialize();
        setCallbacks();
        // ...

    This takes care that the code makes it to the object file, and to the executable in the end.

    I'm not too happy with this. I believe I have something wrong in the definition of my Callbackmanager code, or in the template definitions. If I don't use templates, but a fixed function definition, that function isn't optimized out by the compiler.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Jan Cumps
    Jan Cumps 6 months ago in reply to Jan Cumps

    ... 

    Jan Cumps said:
    I'm not too happy with this. I believe I have something wrong in the definition of my Callbackmanager code, or in the template definitions. If I don't use templates, but a fixed function definition, that function isn't optimized out by the compiler.

    I got this fully solved. I changed my callback manager to a have data member that holds the std::function. In the original design it was a pointer to a std::function.

    For code that uses the manager, nothing changes. C++ encapsulation saved the day :). Retrieve the new version, rebuild, fixed.

    The __attribute__((optimize(0))) marker for the code that sets the callbacks is no longer required.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
Reply
  • Jan Cumps
    Jan Cumps 6 months ago in reply to Jan Cumps

    ... 

    Jan Cumps said:
    I'm not too happy with this. I believe I have something wrong in the definition of my Callbackmanager code, or in the template definitions. If I don't use templates, but a fixed function definition, that function isn't optimized out by the compiler.

    I got this fully solved. I changed my callback manager to a have data member that holds the std::function. In the original design it was a pointer to a std::function.

    For code that uses the manager, nothing changes. C++ encapsulation saved the day :). Retrieve the new version, rebuild, fixed.

    The __attribute__((optimize(0))) marker for the code that sets the callbacks is no longer required.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
Children
No Data
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube