-
Notifications
You must be signed in to change notification settings - Fork 6
160 lines (143 loc) · 8.41 KB
/
f2fs.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
name: F2FS Firmware dumper
on:
workflow_dispatch:
schedule:
- cron: "15 */12 * * *"
push:
jobs:
update:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- model: "SM-X906B"
region: "EUX"
imei: "352125580421096"
steps:
- name: Checkout repo
uses: actions/checkout@master
with:
submodules: true
- name: Compare latest version with current version
id: check
run: |
need_update=0
latest=`curl --retry 5 --retry-delay 5 http://fota-cloud-dn.ospserver.net/firmware/${{ matrix.region }}/${{ matrix.model }}/version.xml | grep latest | sed 's/^[^>]*>//' | sed 's/<.*//'`
latest_short=`echo $latest | cut -d'/' -f1`
current=`cat index/${{ matrix.model }}.${{ matrix.region }}` || need_update=1
[[ $latest != $current ]] && need_update=1
echo "latest_version=$latest" >> $GITHUB_ENV
echo "latest_shortversion=$latest_short" >> $GITHUB_ENV
echo "need_update=$need_update" >> $GITHUB_ENV
- name: Print available space
if: env.need_update == 1
run: |
sudo df -h
- name: Install dependencies
if: env.need_update == 1
run: |
sudo apt-get update
sudo apt-get remove --purge -y "php*" "dotnet*" "mysql*" "nodejs*" "clang*" "google*"
sudo apt-get autoremove -y
sudo apt-get clean
sudo rm -rf /usr/local
sudo apt-get install -y liblz4-tool zip simg2img
sudo wget -O /usr/bin/samfirm https://github.com/ananjaser1211/SamFirm.NET/releases/latest/download/linux-x64 && sudo chmod +x /usr/bin/samfirm
sudo wget -O /usr/bin/lpunpack https://corsica.nu/lpunpack && sudo chmod +x /usr/bin/lpunpack
sudo wget -O /usr/bin/extract-ikconfig https://corsica.nu/extract-ikconfig && sudo chmod +x /usr/bin/extract-ikconfig
sudo wget -O /usr/bin/omc-decoder.jar http://corsica.nu/omc-decoder.jar && sudo chmod +x /usr/bin/omc-decoder.jar
- name: Fetch firmware
if: env.need_update == 1
run: samfirm -m ${{ matrix.model }} -r ${{ matrix.region }} -i ${{ matrix.imei }}
- name: Print directory structure
if: env.need_update == 1
run: ls -la ${{ matrix.model }}_${{ matrix.region }}
- name: Get path of files
if: env.need_update == 1
id: files
run: |
echo "ap=`find -name AP*`" >> $GITHUB_ENV
echo "bl=`find -name BL*`" >> $GITHUB_ENV
echo "cp=`find -name CP*`" >> $GITHUB_ENV
echo "csc=`find -name CSC*`" >> $GITHUB_ENV
- name: Extract images from AP and create zip
if: env.need_update == 1
id: releases
run: |
target_version=${{ env.latest_shortversion }}
basedir=$(pwd)
releasedir=$basedir/$target_version
mkdir -p $releasedir csc
zip -r $releasedir/$target_version-blcp.zip ${{ env.bl }} ${{ env.cp }}
parts=(optics product)
for i in ${parts[@]}; do [[ `tar tvf ${{ env.csc }} | grep $i` ]] && tar xvf ${{ env.csc }} $(echo `tar tvf ${{ env.csc }} | grep $i | awk -F " " '{print $NF}'`); done
for i in `ls | grep lz4`; do lz4 -dm $i ; rm -rf $i; done
for i in `ls | grep img`; do simg2img $i raw_$i ; rm -rf $i; mv raw_$i $i; done
[[ -e optics.img.ext4 ]] && mv optics.img.ext4 optics.img
[[ -e product.img.ext4 ]] && mv product.img.ext4 product.img
if [[ -e optics.img ]]; then sudo mkdir -p optics; sudo mount -o loop,rw,sync optics.img optics; sudo cp -r optics/* csc; sudo umount optics; elif [[ -e product.img ]]; then sudo mkdir -p product; sudo mount -o loop,rw,sync product.img product; sudo cp -r product/* csc; sudo umount product; else sudo cp ${{ env.csc }} csc; fi
sudo find csc -type d -exec chmod 755 {} \;
sudo find csc -type f -exec chmod 644 {} \;
sudo rm -rf csc/HWRDB csc/sipdb `find csc -type f -name *apk`;
sudo java -jar /usr/bin/omc-decoder.jar -i csc -o csc;
zip -r $releasedir/$target_version-csc.zip csc/*;
sudo rm -rf *.img csc
parts=(boot recovery)
for i in ${parts[@]}; do [[ `tar tvf ${{ env.ap }} | grep $i` ]] && tar xvf ${{ env.ap }} $(echo `tar tvf ${{ env.ap }} | grep $i | awk -F " " '{print $NF}'`); done
for i in `ls | grep lz4`; do lz4 -dm $i ; rm -rf $i; done
extract-ikconfig boot.img > $releasedir/$target_version-boot.img_defconfig || echo "# Dummy file to keep workflow alive" > $releasedir/$target_version-boot.img_defconfig;
extract-ikconfig recovery.img > $releasedir/$target_version-recovery.img_defconfig || echo "# Dummy file to keep workflow alive" > $releasedir/$target_version-recovery.img_defconfig;
zip -r $releasedir/$target_version-bootrecovery.zip *.img
rm -rf *.img
mkdir -p fota && echo "# Dummy file to keep workflow alive" > $releasedir/$target_version-dummy;
tar xvf ${{ env.ap }} meta-data/fota.zip --strip-components=1
[[ -e fota.zip ]] && unzip -P fotatest1234 fota.zip -d fota && rm -rf fota/OTA fota/BOOT/kernel fota/RECOVERY/kernel
zip -r $releasedir/$target_version-fota.zip fota
props=(ro.build.PDA= ro.build.changelist= ro.build.display.id= ro.build.id= ro.build.version.release= ro.build.version.release_or_codename= ro.build.version.security_patch= ro.build.version.sdk= ro.system.build.fingerprint= ro.build.description= ro.build.version.base_os= ro.vendor.build.id= ro.vendor.build.security_patch= ro.vendor.build.fingerprint= ro.vendor.build.version.release_or_codename= ro.vendor.build.version.sdk= ro.vndk.version= ro.hardware.chipname= ro.product.board= ro.board.platform= ro.security.keystore.keytype= ro.boot.dynamic_partitions= ro.product.first_api_level= ro.build.characteristics= ro.netflix.bsp_rev=)
for file in `find fota -type f -name *prop`; do for prop in ${props[@]}; do echo $(grep $prop $file) >> version.txt; sed -i ':a;N;$!ba;s/\n\n/\n/g' version.txt; done; done
parts=(super system vendor)
for i in ${parts[@]}; do [[ `tar tvf ${{ env.ap }} | grep $i` ]] && tar xvf ${{ env.ap }} $(echo `tar tvf ${{ env.ap }} | grep $i | awk -F " " '{print $NF}'`); done
rm -rf *.tar.md5 *boot* *vbmeta*
for i in `ls | grep lz4`; do lz4 -dm $i ; rm -rf $i; done
for i in `ls | grep img`; do simg2img $i raw_$i ; rm -rf $i; mv raw_$i $i; done
[[ -e super.img ]] && lpunpack --partition=vendor --partition=system super.img && rm -rf super.img
[[ -e vendor.img.ext4 ]] && mv vendor.img.ext4 vendor.img
if [[ -e vendor.img ]]; then zip -r $releasedir/$target_version-vendor.zip vendor.img; cd $basedir; fi
echo "folder=$releasedir" >> $GITHUB_ENV
- name: Generate commit tag
id: tag
run: |
name=$(date +'%Y%m%d%H%M%S')
echo "name=$name" >> $GITHUB_ENV
- name: Update current version
if: env.need_update == 1
run: |
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git pull origin ${{github.ref}} --ff-only
echo ${{ env.latest_version }} > index/${{ matrix.model }}.${{ matrix.region }}
git add index/${{ matrix.model }}.${{ matrix.region }}
git commit -m "${{ matrix.model }}/${{ matrix.region }}: ${{ env.latest_version }}"
git tag ${{ env.name }}
- name: Push changes to repo
if: env.need_update == 1
uses: ad-m/github-push-action@master
with:
tags: true
github_token: ${{ secrets.TOKEN }}
- name: Upload release assets
if: env.need_update == 1
uses: softprops/action-gh-release@master
env:
GITHUB_TOKEN: ${{ secrets.TOKEN }}
with:
body_path: version.txt
tag_name: ${{ env.name }}
name: "${{ env.latest_shortversion }} - ${{ matrix.model }} - ${{ matrix.region }}"
files: |
${{ env.folder }}/${{ env.latest_shortversion }}-blcp.zip
${{ env.folder }}/${{ env.latest_shortversion }}-vendor.zip
${{ env.folder }}/${{ env.latest_shortversion }}-bootrecovery.zip
${{ env.folder }}/${{ env.latest_shortversion }}-fota.zip
${{ env.folder }}/${{ env.latest_shortversion }}-csc.zip