44 LIBRARIES_BRANCH : libraries-OS-COMPILER
55 NCINE_BRANCH : nCine-BRANCH_NAME-OS-COMPILER
66 NCINE_SOURCE_BRANCH : BRANCH_NAME
7- DEPLOY_MESSAGE :
8- " Push artifact from GitHub Actions build ${{ github.run_number }} with id ${{ github.run_id }}
7+ DEPLOY_MESSAGE : |
8+ Push artifact from GitHub Actions build ${{ github.run_number }} with id ${{ github.run_id }}
99
10- - PROJECT_NAME artifact from branch 'BRANCH_NAME' with commit id ${{ github.sha }}"
10+ - PROJECT_NAME artifact from branch 'BRANCH_NAME' with commit id ${{ github.sha }}
1111
1212on : [push, workflow_dispatch]
1313
1414jobs :
15- Android :
15+ Build :
1616 strategy :
1717 fail-fast : false
1818 matrix :
@@ -25,18 +25,19 @@ jobs:
2525 - name : ' Checkout Code'
2626 uses : actions/checkout@v4
2727
28- - name : ' Unshallow Git Repository for Versioning '
28+ - name : ' Install Build Dependencies '
2929 run : |
30- git fetch --unshallow || true
30+ sudo apt-get update
31+ sudo apt-get install -y libgl1-mesa-dev libopengl-dev libegl1-mesa-dev libglvnd-dev libxext-dev libxrandr-dev libwayland-dev
3132
3233 - name : ' Download nCine-libraries, nCine Artifacts, and project data'
3334 run : |
34- export OS=linux
35- export CC=gcc
36- export BRANCH_NAME=$(git describe --tags --exact-match 2> /dev/null || git symbolic-ref -q --short HEAD || git rev-parse --short HEAD)
35+ OS=linux
36+ CC=gcc
37+ BRANCH_NAME=$(git describe --tags --exact-match 2> /dev/null || git symbolic-ref -q --short HEAD || git rev-parse --short HEAD)
3738
38- export LIBRARIES_BRANCH=`echo $LIBRARIES_BRANCH | sed 's/OS/'"$OS"'/'`
39- export LIBRARIES_BRANCH=`echo $LIBRARIES_BRANCH | sed 's/COMPILER/'"$CC"'/'`
39+ LIBRARIES_BRANCH=`echo $LIBRARIES_BRANCH | sed 's/OS/'"$OS"'/'`
40+ LIBRARIES_BRANCH=`echo $LIBRARIES_BRANCH | sed 's/COMPILER/'"$CC"'/'`
4041
4142 cd ..
4243 git clone https://github.com/nCine/nCine-libraries-artifacts.git
@@ -48,10 +49,10 @@ jobs:
4849 cd ..
4950 rm -rf nCine-libraries-artifacts
5051
51- export NCINE_SOURCE_BRANCH=`echo $NCINE_SOURCE_BRANCH | sed 's/BRANCH_NAME/'"$BRANCH_NAME"'/'`
52- export NCINE_BRANCH=`echo $NCINE_BRANCH | sed 's/BRANCH_NAME/'"$NCINE_SOURCE_BRANCH"'/'`
53- export NCINE_BRANCH=`echo $NCINE_BRANCH | sed 's/OS/'"$OS"'/'`
54- export NCINE_BRANCH=`echo $NCINE_BRANCH | sed 's/COMPILER/'"$CC"'/'`
52+ NCINE_SOURCE_BRANCH=`echo $NCINE_SOURCE_BRANCH | sed 's/BRANCH_NAME/'"$BRANCH_NAME"'/'`
53+ NCINE_BRANCH=`echo $NCINE_BRANCH | sed 's/BRANCH_NAME/'"$NCINE_SOURCE_BRANCH"'/'`
54+ NCINE_BRANCH=`echo $NCINE_BRANCH | sed 's/OS/'"$OS"'/'`
55+ NCINE_BRANCH=`echo $NCINE_BRANCH | sed 's/COMPILER/'"$CC"'/'`
5556 git clone https://github.com/nCine/nCine-artifacts.git
5657 cd nCine-artifacts
5758 git checkout $NCINE_BRANCH
@@ -67,41 +68,115 @@ jobs:
6768
6869 - name : ' CMake Configuration'
6970 run : |
70- export PROJECT_NAME=${GITHUB_REPOSITORY##*/}
71-
71+ PROJECT_NAME=${GITHUB_REPOSITORY##*/}
7272 cmake -B ../$PROJECT_NAME-build-${{ matrix.BuildType }} -D CMAKE_BUILD_TYPE=${{ matrix.BuildType }} -D NCPROJECT_NDK_ARCHITECTURES=${{ matrix.ARCH }} -D NCPROJECT_BUILD_ANDROID=ON -D NCPROJECT_ASSEMBLE_APK=ON -D nCine_DIR=$(pwd)/../nCine/lib/cmake/nCine
7373
7474 - name : ' Gradle Assemble'
7575 run : |
76+ PROJECT_NAME=${GITHUB_REPOSITORY##*/}
7677 export JAVA_HOME=$JAVA_HOME_17_X64
77- export PROJECT_NAME=${GITHUB_REPOSITORY##*/}
7878 export MAKEFLAGS="-j $(getconf _NPROCESSORS_ONLN)"
7979
8080 cd ../$PROJECT_NAME-build-${{ matrix.BuildType }}/android
8181 gradle assemble${{ matrix.BuildType }} --parallel
8282
83+ - name : ' Prepare GitHub Actions Artifact'
84+ run : |
85+ PROJECT_NAME=${GITHUB_REPOSITORY##*/}
86+ cd ../$PROJECT_NAME-build-${{ matrix.BuildType }}/android/app/build/outputs/apk
87+
88+ APK_PATH=$(find . -type f -name '*.apk' | head -n 1)
89+ APK_NAME=$(basename "$APK_PATH")
90+
91+ # Generate a JSON manifest file
92+ MANIFEST="manifest.json"
93+
94+ SIZE=$(stat -c %s "$APK_PATH")
95+ MTIME=$(stat -c %y "$APK_PATH")
96+ MTIME_ISO=$(date -u -d "$MTIME" +"%Y-%m-%dT%H:%M:%SZ")
97+ SHA256=$(sha256sum "$APK_PATH" | awk '{print $1}')
98+
99+ cat > "$MANIFEST" <<EOF
100+ {
101+ "filename": "$APK_NAME",
102+ "size": $SIZE,
103+ "timestamp": "$MTIME_ISO",
104+ "sha256": "$SHA256",
105+ "git_revision": "$GITHUB_SHA"
106+ }
107+ EOF
108+
109+ ARTIFACTS_DIR="$GITHUB_WORKSPACE/$PROJECT_NAME-job-artifacts"
110+ mkdir -p $ARTIFACTS_DIR
111+ cp -p $APK_PATH $ARTIFACTS_DIR
112+ cp -p $MANIFEST $ARTIFACTS_DIR
113+
114+ echo "Contents of the $PROJECT_NAME-job-artifacts directory:"
115+ ls -l $ARTIFACTS_DIR
116+ echo "Contents of the manifest file:"
117+ cat $MANIFEST
118+
119+ - name : ' Upload GitHub Actions Artifact'
120+ uses : actions/upload-artifact@v4
121+ with :
122+ name : ${{ github.event.repository.name }}-job-artifacts-${{ matrix.ARCH }}-${{ matrix.BuildType }}
123+ path : ${{ github.event.repository.name }}-job-artifacts/*
124+
125+ Artifacts :
126+ needs : Build
127+ strategy :
128+ fail-fast : false
129+ matrix :
130+ ARCH : [armeabi-v7a, arm64-v8a, x86_64]
131+ BuildType : [Debug, Release]
132+
133+ runs-on : ' ubuntu-24.04'
134+ concurrency :
135+ group : artifacts-android-${{ matrix.ARCH }}-${{ matrix.BuildType }}
136+ cancel-in-progress : false
137+
138+ steps :
139+ - name : ' Checkout Code'
140+ uses : actions/checkout@v4
141+
142+ - name : ' Unshallow Git Repository for Versioning'
143+ run : |
144+ git fetch --unshallow || true
145+
146+ - name : ' Download GitHub Actions Artifact'
147+ uses : actions/download-artifact@v4
148+ with :
149+ name : ${{ github.event.repository.name }}-job-artifacts-${{ matrix.ARCH }}-${{ matrix.BuildType }}
150+ path : ${{ github.event.repository.name }}-job-artifacts
151+
83152 - name : ' Push Artifacts'
84153 env :
85154 PUBLIC_REPO_TOKEN : ${{ secrets.PUBLIC_REPO_TOKEN }}
86155 run : |
87156 git config --global user.email "actions@github.com"
88157 git config --global user.name "GitHub Actions"
89158
90- export PROJECT_NAME=${GITHUB_REPOSITORY##*/}
91- export BRANCH_NAME=$(git describe --tags --exact-match 2> /dev/null || git symbolic-ref -q --short HEAD || git rev-parse --short HEAD)
92- export DEPLOY_MESSAGE=`sed 's/PROJECT_NAME/'"$PROJECT_NAME"'/' <<< "$DEPLOY_MESSAGE"`
93- export DEPLOY_MESSAGE=`sed 's/BRANCH_NAME/'"$BRANCH_NAME"'/' <<< "$DEPLOY_MESSAGE"`
159+ PROJECT_NAME=${GITHUB_REPOSITORY##*/}
160+ BRANCH_NAME=$(git describe --tags --exact-match 2> /dev/null || git symbolic-ref -q --short HEAD || git rev-parse --short HEAD)
161+ DEPLOY_MESSAGE=`sed 's/PROJECT_NAME/'"$PROJECT_NAME"'/' <<< "$DEPLOY_MESSAGE"`
162+ DEPLOY_MESSAGE=`sed 's/BRANCH_NAME/'"$BRANCH_NAME"'/' <<< "$DEPLOY_MESSAGE"`
163+
164+ cd $PROJECT_NAME-job-artifacts
165+ MANIFEST=$(ls manifest*.json)
166+ APK_FILE=$(jq -r '.filename' "$MANIFEST")
94167
95168 cd ..
96- export DEPLOY_BRANCH=$PROJECT_NAME-$BRANCH_NAME-android-${{ matrix.ARCH }}-${{ matrix.BuildType }}
169+ DEPLOY_BRANCH=$PROJECT_NAME-$BRANCH_NAME-android-${{ matrix.ARCH }}-${{ matrix.BuildType }}
97170 git clone https://$PUBLIC_REPO_TOKEN@github.com/$GITHUB_REPOSITORY-artifacts.git >/dev/null 2>&1
98- cd $PROJECT_NAME-artifacts
99171
172+ cd $PROJECT_NAME-artifacts
100173 git checkout $DEPLOY_BRANCH || git checkout --orphan $DEPLOY_BRANCH
101174 git reset
102175 git clean -f
103176 git rm * || true
104- mv -f ../$PROJECT_NAME-build-${{ matrix.BuildType }}/android/app/build/outputs/apk/*/*.apk .
105- git add *.apk
177+ mv -f ../$PROJECT_NAME-job-artifacts/$MANIFEST .
178+ mv -f ../$PROJECT_NAME-job-artifacts/$APK_FILE .
179+
180+ git add $MANIFEST $APK_FILE
106181 git commit --amend -m "$DEPLOY_MESSAGE" || git commit -m "$DEPLOY_MESSAGE"
107182 git push --force || git push --set-upstream origin $DEPLOY_BRANCH
0 commit comments