ci: restore workflows to use cache again
author백종민/Tizen Platform Lab(SR)/삼성전자 <jm0829.baek@samsung.com>
Wed, 30 Aug 2023 01:53:08 +0000 (10:53 +0900)
committer백종민/Tizen Platform Lab(SR)/삼성전자 <jm0829.baek@samsung.com>
Wed, 30 Aug 2023 01:53:08 +0000 (10:53 +0900)
.github/workflows/gbs-build-p4-aarch64.yml
.github/workflows/gbs-build-p4-i586.yml
.github/workflows/gbs-build-p4.yml
.github/workflows/tr-build.yml

index c3b545f..118f70a 100644 (file)
@@ -16,7 +16,7 @@ on:
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
 jobs:
   gbs-build-p4-aarch64:
-    runs-on: [ code-linux, code-default ]
+    runs-on: [ code-extra-default ]
     container:
       image: actions-docker.bart.sec.samsung.net/gbs
       options: --user root --privileged
@@ -38,35 +38,103 @@ jobs:
           command: login
           global_options: '-p ${{ secrets.P4PORT }} -u ${{ secrets.P4USER }}'
 
-      # pull down codes (VD TrackRenderer DEV) from VD P4
+      # pull down codes (Build Config) from VD P4
       # note that if P4USER is changed, new VD P4 workspace should be created before running this workflow.
       # If the location of TrackRenderer DEV is changed, the P4 workspace should be updated too.
-      - name: p4 sync TrackRenderer
+      - name: p4 sync build conf
         uses: code-actions/perforce-setup-p4@v1
         env:
           P4CLIENT: DEV-TZTV-GithubAction-${{ secrets.P4USER }}
         with:
           command: sync
-          arguments: -f
+          arguments: |
+            -f \
+            //SHARED/[FMS_BuildConf_Prj]/[INT]/[MAIN]/[ONEPROD_Prj]/...#head
 
-      # VD TrackRenderer DEV is built first for the ESPP repository build, to avoid compile error due to header dependency.
-      - name: Build TrackRenderer
+      # Set environmental variables which will be used for the next run steps.
+      - name: Set Env Variables
         run: |
-          cd /tmp/p4ws/TIZEN/ONEMAIN/DEV/PLATFORM/MMP_PPI_SRCN/PPI/capi-trackrenderer-tv
-          wget http://168.219.244.109/tools/vbs/archive/0.25.2/Ubuntu_20.04/vbs-0.25.2.deb
-          sudo dpkg -i vbs-0.25.2.deb
-          export BASE_TIZEN_VER=$(echo ${{ secrets.BASE_REPO_URL_AARCH64 }} | cut --delimiter='/' --fields=5)
-          export BASE_TIZEN_REL_VER=$(echo ${{ secrets.BASE_REPO_URL_AARCH64 }} | cut --delimiter='/' --fields=7)
-          echo "base info: [$BASE_TIZEN_VER][$BASE_TIZEN_REL_VER]"
-          export PROD_YEAR=$(echo ${{ secrets.PROD_REPO_URL_AARCH64 }} | cut --delimiter='/' --fields=7)
-          export PROD_BRANCH=$(echo ${{ secrets.PROD_REPO_URL_AARCH64 }} | cut --delimiter='/' --fields=8)
-          export PROD_CHIP=$(echo ${{ secrets.PROD_REPO_URL_AARCH64 }} | cut --delimiter='/' --fields=9)
-          export PROD_REL_VER=$(echo ${{ secrets.PROD_REPO_URL_AARCH64 }} | cut --delimiter='/' --fields=10)
-          echo "prod info: [$PROD_YEAR][$PROD_BRANCH][$PROD_CHIP][$PROD_REL_VER]"
-          vbs build -A aarch64 -R ${{ secrets.BASE_REPO_URL_AARCH64 }} -R ${{ secrets.PROD_REPO_URL_AARCH64 }} -D /tmp/p4ws/buildconf/TV/TIZEN_OscarP64_build.conf --include-all --skip-p4check --clean
+          export BASE_REPO_URL=${{ secrets.BASE_REPO_URL_AARCH64 }}
+          export PROD_REPO_URL=${{ secrets.PROD_REPO_URL_AARCH64 }}
+          export BASE_TIZEN_VER=$(echo $BASE_REPO_URL | cut --delimiter='/' --fields=5)
+          export BASE_TIZEN_REL_VER=$(echo $BASE_REPO_URL | cut --delimiter='/' --fields=7)
+          export PROD_YEAR=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=7)
+          export PROD_BRANCH=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=8)
+          export PROD_CHIP=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=9)
+          export PROD_REL_VER=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=10)
+          export DATE=$(date +'%Y-%m-%d')
+          echo "BASE_REPO_URL=$BASE_REPO_URL" >> "$GITHUB_ENV"
+          echo "PROD_REPO_URL=$PROD_REPO_URL" >> "$GITHUB_ENV"
+          echo "BASE_TIZEN_VER=$BASE_TIZEN_VER" >> "$GITHUB_ENV"
+          if [ $BASE_TIZEN_REL_VER = 'latest' ]; then
+            echo "BASE_TIZEN_REL_VER=$BASE_TIZEN_REL_VER ($DATE)" >> "$GITHUB_ENV"
+          else
+            echo "BASE_TIZEN_REL_VER=$BASE_TIZEN_REL_VER" >> "$GITHUB_ENV"
+          fi
+          echo "PROD_YEAR=$PROD_YEAR" >> "$GITHUB_ENV"
+          echo "PROD_BRANCH=$PROD_BRANCH" >> "$GITHUB_ENV"
+          echo "PROD_CHIP=$PROD_CHIP" >> "$GITHUB_ENV"
+          if [ $PROD_REL_VER = 'latest' ]; then
+            echo "PROD_REL_VER=$PROD_REL_VER ($DATE)" >> "$GITHUB_ENV"
+          else
+            echo "PROD_REL_VER=$PROD_REL_VER" >> "$GITHUB_ENV"
+          fi
+          export DATE_OF_LATEST=$(date +'%m%d')
+          export GBS_ROOT_CACHE_KEY_BASE=$BASE_TIZEN_VER-$BASE_TIZEN_REL_VER-$PROD_YEAR-$PROD_BRANCH-$PROD_CHIP-$PROD_REL_VER
+          if [ $BASE_TIZEN_REL_VER = 'latest' ] || [ $PROD_REL_VER = 'latest' ]; then
+            echo "GBS_ROOT_CACHE_KEY=$GBS_ROOT_CACHE_KEY_BASE-$DATE_OF_LATEST" >> "$GITHUB_ENV"
+          else
+            echo "GBS_ROOT_CACHE_KEY=$GBS_ROOT_CACHE_KEY_BASE" >> "$GITHUB_ENV"
+          fi
+
+      # Sometimes binfmt setting is invalid and it causes build error, so reset the setting before building.
+      - name: Reset binfmt_misc
+        run: |
+          ls -al /proc/sys/fs/binfmt_misc
+          if [ -z "$(ls -A /proc/sys/fs/binfmt_misc)" ]; then
+            echo "binfmt_misc is empty: disable and re-enable binfmt service"
+            sudo /usr/sbin/update-binfmts --disable
+            sudo systemctl disable binfmt-support.service
+            sudo systemctl enable binfmt-support.service
+            sudo /usr/sbin/update-binfmts --enable
+          else
+            echo "binfmt_misc is not empty: just reset binfmt settings"
+          fi
+          sudo sh -c "echo -1 > /proc/sys/fs/binfmt_misc/status"
+          echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:/usr/bin/qemu-arm-binfmt:P' | sudo tee /proc/sys/fs/binfmt_misc/register
+          echo ':aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-binfmt:P' | sudo tee /proc/sys/fs/binfmt_misc/register
+          ls -al /proc/sys/fs/binfmt_misc
+          cat /proc/sys/fs/binfmt_misc/aarch64
+
+      # When cache with the key exists, the cache is restored at this step. So no need of clean build.
+      - name: Caching GBS-ROOT
+        id: cache-gbs-root
+        uses: code-actions/cache@v3
+        with:
+          path: ~/GBS-ROOT
+          key: ${{ env.GBS_ROOT_CACHE_KEY }}
+
+      # When there is no cache, create the download path.
+      - name: Create Directory for Artifact
+        if: steps.cache-gbs-root.outputs.cache-hit != 'true'
+        run: |
+          mkdir -p ~/GBS-ROOT/local/repos/tizen/aarch64/RPMS
+
+      # Download TrackRenderer RPM from workflow artifact storage.
+      - name: Download TrackRenderer RPM
+        uses: code-actions/dawidd6-action-download-artifact@v2
+        with:
+          workflow: tr-build.yml
+          workflow_conclusion: success
+          name: trackrenderer-rpm-aarch64
+          path: ~/GBS-ROOT/local/repos/tizen/aarch64/RPMS
+          check_artifacts: true
+          search_artifacts: true
+          if_no_artifact_found: ignore
 
       # Finally, build this repository's ESPP code. No need of --clean option, we reuse previously built GBS-ROOT for speed-up
       - name: Build ESPP
         run: |
-          cd -
-          gbs build -A aarch64 -R ${{ secrets.BASE_REPO_URL_AARCH64 }} -R ${{ secrets.PROD_REPO_URL_AARCH64 }} -D /tmp/p4ws/buildconf/TV/TIZEN_OscarP64_build.conf --include-all
+          gbs build -A aarch64 -R ${{ env.BASE_REPO_URL }} -R ${{ env.PROD_REPO_URL }} \
+            -D /tmp/p4ws/buildconf/TV/TIZEN_${{ env.PROD_CHIP }}_build.conf \
+            --include-all
index d6d4572..e641d7d 100644 (file)
@@ -16,7 +16,7 @@ on:
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
 jobs:
   gbs-build-p4-i586:
-    runs-on: [ code-linux, code-default ]
+    runs-on: [ code-extra-default ]
     container:
       image: actions-docker.bart.sec.samsung.net/gbs
       options: --user root --privileged
@@ -38,35 +38,104 @@ jobs:
           command: login
           global_options: '-p ${{ secrets.P4PORT }} -u ${{ secrets.P4USER }}'
 
-      # pull down codes (VD TrackRenderer DEV) from VD P4
+      # pull down codes (Build Config) from VD P4
       # note that if P4USER is changed, new VD P4 workspace should be created before running this workflow.
       # If the location of TrackRenderer DEV is changed, the P4 workspace should be updated too.
-      - name: p4 sync TrackRenderer
+      - name: p4 sync build conf
         uses: code-actions/perforce-setup-p4@v1
         env:
           P4CLIENT: DEV-TZTV-GithubAction-${{ secrets.P4USER }}
         with:
           command: sync
-          arguments: -f
+          arguments: |
+            -f \
+            //SHARED/[FMS_BuildConf_Prj]/[INT]/[MAIN]/[ONEPROD_Prj]/...#head
 
-      # VD TrackRenderer DEV is built first for the ESPP repository build, to avoid compile error due to header dependency.
-      - name: Build TrackRenderer
+      # Set environmental variables which will be used for the next run steps.
+      - name: Set Env Variables
         run: |
-          cd /tmp/p4ws/TIZEN/ONEMAIN/DEV/PLATFORM/MMP_PPI_SRCN/PPI/capi-trackrenderer-tv
-          wget http://168.219.244.109/tools/vbs/archive/0.25.2/Ubuntu_20.04/vbs-0.25.2.deb
-          sudo dpkg -i vbs-0.25.2.deb
-          export BASE_TIZEN_VER=$(echo ${{ secrets.BASE_REPO_URL_I586 }} | cut --delimiter='/' --fields=5)
-          export BASE_TIZEN_REL_VER=$(echo ${{ secrets.BASE_REPO_URL_I586 }} | cut --delimiter='/' --fields=7)
-          echo "base info: [$BASE_TIZEN_VER][$BASE_TIZEN_REL_VER]"
-          export PROD_YEAR=$(echo ${{ secrets.PROD_REPO_URL_I586 }} | cut --delimiter='/' --fields=7)
-          export PROD_BRANCH=$(echo ${{ secrets.PROD_REPO_URL_I586 }} | cut --delimiter='/' --fields=8)
-          export PROD_CHIP=$(echo ${{ secrets.PROD_REPO_URL_I586 }} | cut --delimiter='/' --fields=9)
-          export PROD_REL_VER=$(echo ${{ secrets.PROD_REPO_URL_I586 }} | cut --delimiter='/' --fields=10)
-          echo "prod info: [$PROD_YEAR][$PROD_BRANCH][$PROD_CHIP][$PROD_REL_VER]"
-          vbs build -A i586 -R ${{ secrets.BASE_REPO_URL_I586 }} -R ${{ secrets.PROD_REPO_URL_I586 }} -D /tmp/p4ws/buildconf/TV/TIZEN_emulator32_build.conf --include-all --skip-p4check --clean
+          export BASE_REPO_URL=${{ secrets.BASE_REPO_URL_I586 }}
+          export PROD_REPO_URL=${{ secrets.PROD_REPO_URL_I586 }}
+          export BASE_TIZEN_VER=$(echo $BASE_REPO_URL | cut --delimiter='/' --fields=5)
+          export BASE_TIZEN_REL_VER=$(echo $BASE_REPO_URL | cut --delimiter='/' --fields=7)
+          export PROD_YEAR=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=7)
+          export PROD_BRANCH=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=8)
+          export PROD_CHIP=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=9)
+          export PROD_REL_VER=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=10)
+          export DATE=$(date +'%Y-%m-%d')
+          echo "BASE_REPO_URL=$BASE_REPO_URL" >> "$GITHUB_ENV"
+          echo "PROD_REPO_URL=$PROD_REPO_URL" >> "$GITHUB_ENV"
+          echo "BASE_TIZEN_VER=$BASE_TIZEN_VER" >> "$GITHUB_ENV"
+          if [ $BASE_TIZEN_REL_VER = 'latest' ]; then
+            echo "BASE_TIZEN_REL_VER=$BASE_TIZEN_REL_VER ($DATE)" >> "$GITHUB_ENV"
+          else
+            echo "BASE_TIZEN_REL_VER=$BASE_TIZEN_REL_VER" >> "$GITHUB_ENV"
+          fi
+          echo "PROD_YEAR=$PROD_YEAR" >> "$GITHUB_ENV"
+          echo "PROD_BRANCH=$PROD_BRANCH" >> "$GITHUB_ENV"
+          echo "PROD_CHIP=$PROD_CHIP" >> "$GITHUB_ENV"
+          if [ $PROD_REL_VER = 'latest' ]; then
+            echo "PROD_REL_VER=$PROD_REL_VER ($DATE)" >> "$GITHUB_ENV"
+          else
+            echo "PROD_REL_VER=$PROD_REL_VER" >> "$GITHUB_ENV"
+          fi
+          export DATE_OF_LATEST=$(date +'%m%d')
+          export GBS_ROOT_CACHE_KEY_BASE=$BASE_TIZEN_VER-$BASE_TIZEN_REL_VER-$PROD_YEAR-$PROD_BRANCH-$PROD_CHIP-$PROD_REL_VER
+          if [ $BASE_TIZEN_REL_VER = 'latest' ] || [ $PROD_REL_VER = 'latest' ]; then
+            echo "GBS_ROOT_CACHE_KEY=$GBS_ROOT_CACHE_KEY_BASE-$DATE_OF_LATEST" >> "$GITHUB_ENV"
+          else
+            echo "GBS_ROOT_CACHE_KEY=$GBS_ROOT_CACHE_KEY_BASE" >> "$GITHUB_ENV"
+          fi
+
+      # Sometimes binfmt setting is invalid and it causes build error, so reset the setting before building.
+      - name: Reset binfmt_misc
+        run: |
+          ls -al /proc/sys/fs/binfmt_misc
+          if [ -z "$(ls -A /proc/sys/fs/binfmt_misc)" ]; then
+            echo "binfmt_misc is empty: disable and re-enable binfmt service"
+            sudo /usr/sbin/update-binfmts --disable
+            sudo systemctl disable binfmt-support.service
+            sudo systemctl enable binfmt-support.service
+            sudo /usr/sbin/update-binfmts --enable
+          else
+            echo "binfmt_misc is not empty: just reset binfmt settings"
+          fi
+          sudo sh -c "echo -1 > /proc/sys/fs/binfmt_misc/status"
+          echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:/usr/bin/qemu-arm-binfmt:P' | sudo tee /proc/sys/fs/binfmt_misc/register
+          echo ':aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-binfmt:P' | sudo tee /proc/sys/fs/binfmt_misc/register
+          ls -al /proc/sys/fs/binfmt_misc
+          echo "emulator build"
+
+      # When cache with the key exists, the cache is restored at this step. So no need of clean build.
+      - name: Caching GBS-ROOT
+        id: cache-gbs-root
+        uses: code-actions/cache@v3
+        with:
+          path: ~/GBS-ROOT
+          key: ${{ env.GBS_ROOT_CACHE_KEY }}
+
+      # When there is no cache, create the download path.
+      - name: Create Directory for Artifact
+        if: steps.cache-gbs-root.outputs.cache-hit != 'true'
+        run: |
+          mkdir -p ~/GBS-ROOT/local/repos/tizen/i586/RPMS
+
+      # Download TrackRenderer RPM from workflow artifact storage.
+      - name: Download TrackRenderer RPM
+        uses: code-actions/dawidd6-action-download-artifact@v2
+        with:
+          workflow: tr-build.yml
+          workflow_conclusion: success
+          name: trackrenderer-rpm-i586
+          path: ~/GBS-ROOT/local/repos/tizen/i586/RPMS
+          check_artifacts: true
+          search_artifacts: true
+          if_no_artifact_found: ignore
 
       # Finally, build this repository's ESPP code. No need of --clean option, we reuse previously built GBS-ROOT for speed-up
       - name: Build ESPP
         run: |
-          cd -
-          gbs build -A i586 -R ${{ secrets.BASE_REPO_URL_I586 }} -R ${{ secrets.PROD_REPO_URL_I586 }} -D /tmp/p4ws/buildconf/TV/TIZEN_emulator32_build.conf --include-all
+          gbs build -A i586 -R ${{ env.BASE_REPO_URL }} -R ${{ env.PROD_REPO_URL }} \
+            -D /tmp/p4ws/buildconf/TV/TIZEN_${{ env.PROD_CHIP }}_build.conf \
+            --include-all
index b2f3c9b..7eda32a 100644 (file)
@@ -16,7 +16,7 @@ on:
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
 jobs:
   gbs-build-p4:
-    runs-on: [ code-linux, code-default ]
+    runs-on: [ code-extra-default ]
     container:
       image: actions-docker.bart.sec.samsung.net/gbs
       options: --user root --privileged
@@ -38,35 +38,103 @@ jobs:
           command: login
           global_options: '-p ${{ secrets.P4PORT }} -u ${{ secrets.P4USER }}'
 
-      # pull down codes (VD TrackRenderer DEV) from VD P4
+      # pull down codes (Build Config) from VD P4
       # note that if P4USER is changed, new VD P4 workspace should be created before running this workflow.
       # If the location of TrackRenderer DEV is changed, the P4 workspace should be updated too.
-      - name: p4 sync TrackRenderer
+      - name: p4 sync build conf
         uses: code-actions/perforce-setup-p4@v1
         env:
           P4CLIENT: DEV-TZTV-GithubAction-${{ secrets.P4USER }}
         with:
           command: sync
-          arguments: -f
+          arguments: |
+            -f \
+            //SHARED/[FMS_BuildConf_Prj]/[INT]/[MAIN]/[ONEPROD_Prj]/...#head
 
-      # VD TrackRenderer DEV is built first for the ESPP repository build, to avoid compile error due to header dependency.
-      - name: Build TrackRenderer
+      # Set environmental variables which will be used for the next run steps.
+      - name: Set Env Variables
         run: |
-          cd /tmp/p4ws/TIZEN/ONEMAIN/DEV/PLATFORM/MMP_PPI_SRCN/PPI/capi-trackrenderer-tv
-          wget http://168.219.244.109/tools/vbs/archive/0.25.2/Ubuntu_20.04/vbs-0.25.2.deb
-          sudo dpkg -i vbs-0.25.2.deb
-          export BASE_TIZEN_VER=$(echo ${{ secrets.BASE_REPO_URL }} | cut --delimiter='/' --fields=5)
-          export BASE_TIZEN_REL_VER=$(echo ${{ secrets.BASE_REPO_URL }} | cut --delimiter='/' --fields=7)
-          echo "base info: [$BASE_TIZEN_VER][$BASE_TIZEN_REL_VER]"
-          export PROD_YEAR=$(echo ${{ secrets.PROD_REPO_URL }} | cut --delimiter='/' --fields=7)
-          export PROD_BRANCH=$(echo ${{ secrets.PROD_REPO_URL }} | cut --delimiter='/' --fields=8)
-          export PROD_CHIP=$(echo ${{ secrets.PROD_REPO_URL }} | cut --delimiter='/' --fields=9)
-          export PROD_REL_VER=$(echo ${{ secrets.PROD_REPO_URL }} | cut --delimiter='/' --fields=10)
-          echo "prod info: [$PROD_YEAR][$PROD_BRANCH][$PROD_CHIP][$PROD_REL_VER]"
-          vbs build -A armv7l -R ${{ secrets.BASE_REPO_URL }} -R ${{ secrets.PROD_REPO_URL }} -D /tmp/p4ws/buildconf/TV/TIZEN_PontusM_build.conf --include-all --skip-p4check --clean
+          export BASE_REPO_URL=${{ secrets.BASE_REPO_URL }}
+          export PROD_REPO_URL=${{ secrets.PROD_REPO_URL }}
+          export BASE_TIZEN_VER=$(echo $BASE_REPO_URL | cut --delimiter='/' --fields=5)
+          export BASE_TIZEN_REL_VER=$(echo $BASE_REPO_URL | cut --delimiter='/' --fields=7)
+          export PROD_YEAR=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=7)
+          export PROD_BRANCH=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=8)
+          export PROD_CHIP=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=9)
+          export PROD_REL_VER=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=10)
+          export DATE=$(date +'%Y-%m-%d')
+          echo "BASE_REPO_URL=$BASE_REPO_URL" >> "$GITHUB_ENV"
+          echo "PROD_REPO_URL=$PROD_REPO_URL" >> "$GITHUB_ENV"
+          echo "BASE_TIZEN_VER=$BASE_TIZEN_VER" >> "$GITHUB_ENV"
+          if [ $BASE_TIZEN_REL_VER = 'latest' ]; then
+            echo "BASE_TIZEN_REL_VER=$BASE_TIZEN_REL_VER ($DATE)" >> "$GITHUB_ENV"
+          else
+            echo "BASE_TIZEN_REL_VER=$BASE_TIZEN_REL_VER" >> "$GITHUB_ENV"
+          fi
+          echo "PROD_YEAR=$PROD_YEAR" >> "$GITHUB_ENV"
+          echo "PROD_BRANCH=$PROD_BRANCH" >> "$GITHUB_ENV"
+          echo "PROD_CHIP=$PROD_CHIP" >> "$GITHUB_ENV"
+          if [ $PROD_REL_VER = 'latest' ]; then
+            echo "PROD_REL_VER=$PROD_REL_VER ($DATE)" >> "$GITHUB_ENV"
+          else
+            echo "PROD_REL_VER=$PROD_REL_VER" >> "$GITHUB_ENV"
+          fi
+          export DATE_OF_LATEST=$(date +'%m%d')
+          export GBS_ROOT_CACHE_KEY_BASE=$BASE_TIZEN_VER-$BASE_TIZEN_REL_VER-$PROD_YEAR-$PROD_BRANCH-$PROD_CHIP-$PROD_REL_VER
+          if [ $BASE_TIZEN_REL_VER = 'latest' ] || [ $PROD_REL_VER = 'latest' ]; then
+            echo "GBS_ROOT_CACHE_KEY=$GBS_ROOT_CACHE_KEY_BASE-$DATE_OF_LATEST" >> "$GITHUB_ENV"
+          else
+            echo "GBS_ROOT_CACHE_KEY=$GBS_ROOT_CACHE_KEY_BASE" >> "$GITHUB_ENV"
+          fi
+
+      # Sometimes binfmt setting is invalid and it causes build error, so reset the setting before building.
+      - name: Reset binfmt_misc
+        run: |
+          ls -al /proc/sys/fs/binfmt_misc
+          if [ -z "$(ls -A /proc/sys/fs/binfmt_misc)" ]; then
+            echo "binfmt_misc is empty: disable and re-enable binfmt service"
+            sudo /usr/sbin/update-binfmts --disable
+            sudo systemctl disable binfmt-support.service
+            sudo systemctl enable binfmt-support.service
+            sudo /usr/sbin/update-binfmts --enable
+          else
+            echo "binfmt_misc is not empty: just reset binfmt settings"
+          fi
+          sudo sh -c "echo -1 > /proc/sys/fs/binfmt_misc/status"
+          echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:/usr/bin/qemu-arm-binfmt:P' | sudo tee /proc/sys/fs/binfmt_misc/register
+          echo ':aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-binfmt:P' | sudo tee /proc/sys/fs/binfmt_misc/register
+          ls -al /proc/sys/fs/binfmt_misc
+          cat /proc/sys/fs/binfmt_misc/arm
+
+      # When cache with the key exists, the cache is restored at this step. So no need of clean build.
+      - name: Caching GBS-ROOT
+        id: cache-gbs-root
+        uses: code-actions/cache@v3
+        with:
+          path: ~/GBS-ROOT
+          key: ${{ env.GBS_ROOT_CACHE_KEY }}
+
+      # When there is no cache, create the download path.
+      - name: Create Directory for Artifact
+        if: steps.cache-gbs-root.outputs.cache-hit != 'true'
+        run: |
+          mkdir -p ~/GBS-ROOT/local/repos/tizen/armv7l/RPMS
+
+      # Download TrackRenderer RPM from workflow artifact storage.
+      - name: Download TrackRenderer RPM
+        uses: code-actions/dawidd6-action-download-artifact@v2
+        with:
+          workflow: tr-build.yml
+          workflow_conclusion: success
+          name: trackrenderer-rpm-armv7l
+          path: ~/GBS-ROOT/local/repos/tizen/armv7l/RPMS
+          check_artifacts: true
+          search_artifacts: true
+          if_no_artifact_found: ignore
 
       # Finally, build this repository's ESPP code. No need of --clean option, we reuse previously built GBS-ROOT for speed-up
       - name: Build ESPP
         run: |
-          cd -
-          gbs build -A armv7l -R ${{ secrets.BASE_REPO_URL }} -R ${{ secrets.PROD_REPO_URL }} -D /tmp/p4ws/buildconf/TV/TIZEN_PontusM_build.conf --include-all
+          gbs build -A armv7l -R ${{ env.BASE_REPO_URL }} -R ${{ env.PROD_REPO_URL }} \
+            -D /tmp/p4ws/buildconf/TV/TIZEN_${{ env.PROD_CHIP }}_build.conf \
+            --include-all
index 010eac9..bc66a23 100644 (file)
@@ -20,7 +20,7 @@ on:
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
 jobs:
   tr-build:
-    runs-on: [ code-linux, code-default ]
+    runs-on: [ code-extra-default ]
     container:
       image: actions-docker.bart.sec.samsung.net/gbs
       options: --user root --privileged
@@ -39,8 +39,8 @@ jobs:
           command: login
           global_options: '-p ${{ secrets.P4PORT }} -u ${{ secrets.P4USER }}'
 
-      # pull down codes (VD TrackRenderer DEV) from VD P4
-      # note that if P4USER is changed, new VD P4 workspace should be created before running this workflow.
+      # Pull down codes (VD TrackRenderer DEV) from VD P4
+      # Note that if P4USER is changed, new VD P4 workspace should be created before running this workflow.
       # If the location of TrackRenderer DEV is changed, the P4 workspace should be updated too.
       - name: p4 sync TrackRenderer
         uses: code-actions/perforce-setup-p4@v1
@@ -53,6 +53,7 @@ jobs:
             //TIZEN/[MAIN]/[ONEPROD_Prj]/[DEV]/[PLATFORM]/[MMP_PPI_SRCN]/PPI/capi-trackrenderer-tv/...#head \
             //SHARED/[FMS_BuildConf_Prj]/[INT]/[MAIN]/[ONEPROD_Prj]/...#head
 
+      # Set environmental variables which will be used for the next run steps.
       - name: Set Env Variables
         run: |
           if [ ${{ inputs.build_arch }} = 'armv7l' ]; then
@@ -74,7 +75,6 @@ jobs:
           export PROD_BRANCH=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=8)
           export PROD_CHIP=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=9)
           export PROD_REL_VER=$(echo $PROD_REPO_URL | cut --delimiter='/' --fields=10)
-
           export DATE=$(date +'%Y-%m-%d')
           echo "BASE_REPO_URL=$BASE_REPO_URL" >> "$GITHUB_ENV"
           echo "PROD_REPO_URL=$PROD_REPO_URL" >> "$GITHUB_ENV"
@@ -101,13 +101,39 @@ jobs:
             echo "GBS_ROOT_CACHE_KEY=$GBS_ROOT_CACHE_KEY_BASE" >> "$GITHUB_ENV"
           fi
 
+      # Sometimes binfmt setting is invalid and it causes build error, so reset the setting before building.
+      - name: Reset binfmt_misc
+        run: |
+          ls -al /proc/sys/fs/binfmt_misc
+          if [ -z "$(ls -A /proc/sys/fs/binfmt_misc)" ]; then
+            echo "binfmt_misc is empty: disable and re-enable binfmt service"
+            sudo /usr/sbin/update-binfmts --disable
+            sudo systemctl disable binfmt-support.service
+            sudo systemctl enable binfmt-support.service
+            sudo /usr/sbin/update-binfmts --enable
+          else
+            echo "binfmt_misc is not empty: just reset binfmt settings"
+          fi
+          sudo sh -c "echo -1 > /proc/sys/fs/binfmt_misc/status"
+          echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:/usr/bin/qemu-arm-binfmt:P' | sudo tee /proc/sys/fs/binfmt_misc/register
+          echo ':aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-binfmt:P' | sudo tee /proc/sys/fs/binfmt_misc/register
+          ls -al /proc/sys/fs/binfmt_misc
+          if [ ${{ inputs.build_arch }} = 'armv7l' ]; then
+            cat /proc/sys/fs/binfmt_misc/arm
+          elif [ ${{ inputs.build_arch }} = 'aarch64' ]; then
+            cat /proc/sys/fs/binfmt_misc/aarch64
+          else
+            echo "emulator build"
+          fi
+
+      # When cache with the key exists, the cache is restored at this step. So no need of clean build.
       - name: Caching GBS-ROOT
         uses: code-actions/cache@v3
         with:
           path: ~/GBS-ROOT
           key: ${{ env.GBS_ROOT_CACHE_KEY }}
 
-      # VD TrackRenderer DEV is built first for the ESPP repository build, to avoid compile error due to header dependency.
+      # Build VD TrackRenderer from P4 DEV
       - name: Build TrackRenderer
         run: |
           cd /tmp/p4ws/TIZEN/ONEMAIN/DEV/PLATFORM/MMP_PPI_SRCN/PPI/capi-trackrenderer-tv
@@ -117,7 +143,7 @@ jobs:
             -D /tmp/p4ws/buildconf/TV/TIZEN_${{ env.PROD_CHIP }}_build.conf \
             --include-all --skip-p4check
 
-      # Upload the created RPM on Github workflow artifact storage. It will be used by other workflows.
+      # Upload the created TrackRenderer RPM on Github workflow artifact storage. It will be used by ESPP build.
       - name: Upload TrackRenderer RPM
         uses: code-actions/upload-artifact@v3
         with: