├── .github └── workflows │ ├── AlphaTV.y │ ├── AlphaTV.ym │ ├── BearTV.ym │ ├── TVBoxOSC.jks │ ├── diy app.yml │ ├── diy.yml │ ├── stv.yml │ ├── tg-tv.ym │ ├── tg-tvbox-2.yml │ ├── tvb taka.yml │ ├── 测试.yml │ └── 蜂蜜TV.yml ├── README.md ├── tvbox.yml └── update.json /.github/workflows/AlphaTV.y: -------------------------------------------------------------------------------- 1 | name: AlphaTV 2 | 3 | on: 4 | schedule: 5 | - cron: 45 4 * * * 6 | workflow_dispatch: 7 | 8 | 9 | env: 10 | userName: lqinyli 11 | repoName: FONGMI-TV 12 | branchName: main 13 | appName: AlphaTV 14 | 15 | jobs: 16 | prepare: 17 | runs-on: ubuntu-latest 18 | outputs: 19 | commit: ${{ env.commit }} 20 | tag: ${{ env.tag }} 21 | ESCAPED: ${{ env.ESCAPED }} 22 | steps: 23 | - name: Checkout 24 | uses: actions/checkout@v3 25 | with: 26 | fetch-depth: 0 27 | - name: Check New Commit 28 | run: | 29 | upStream=https://github.com/${{ env.userName }}/${{ env.repoName }} 30 | echo "upStream=$upStream" >> $GITHUB_ENV 31 | commit=$(curl -sL $upStream/commits/${{ env.branchName }} |grep -o "/${{ env.userName }}/${{ env.repoName }}/commit/[a-z0-9]\+" |head -1 | cut -d\/ -f5) 32 | if ! git log --oneline |grep -q "$commit"; then 33 | echo "commit=$commit" >> $GITHUB_ENV 34 | echo "commitS=${commit:0:7}" >> $GITHUB_ENV 35 | lastCommit=`git log --oneline |grep -o '[a-z0-9]\{40\}' |head -1` 36 | echo "lastCommit=$lastCommit" >> $GITHUB_ENV 37 | echo "lastCommitS=${lastCommit:0:7}" >> $GITHUB_ENV 38 | fi 39 | - name: Checkout Source Code 40 | if: ${{ env.commit }} 41 | run: | 42 | git clone ${{ env.upStream }} ${{ env.repoName }} 43 | cd ${{ env.repoName }} 44 | git checkout ${{ env.commit }} 45 | #zip 46 | zip -q -x ".git/*" -r ${{ env.commitS }}-source.zip . 47 | #tag 48 | tag="$(git log --date=format:'%Y%m%d-%H%M' --pretty=format:%cd ${{ env.commitS }} -1)" 49 | echo "tag=$tag" >> $GITHUB_ENV 50 | - name: Release Changelog 51 | if: ${{ env.commit }} 52 | working-directory: ${{ env.repoName }} 53 | run: | 54 | export LESSCHARSET=utf-8 55 | if [ "${{ env.commit }}" == "${{ env.lastCommit }}" ]; then 56 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")" 57 | else 58 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }}...${{ env.lastCommit }} |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")" 59 | fi 60 | if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ]; then 61 | ESCAPED=$(echo $COMMIT_MESSAGE |sed 's#%[eE]2[0-9a-zA-Z%]\{6\}##g') 62 | else 63 | COMMIT_URL=${{ env.upStream }}/commits/${{ env.branchName }} 64 | ESCAPED="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$COMMIT_URL")" 65 | fi 66 | echo "ESCAPED=$ESCAPED" >> $GITHUB_ENV 67 | - name: Upload Sourcecode To Artifact 68 | uses: actions/upload-artifact@v3 69 | if: ${{ env.commit }} 70 | with: 71 | name: ${{ env.tag }}-source 72 | path: ${{ env.repoName }}/*-source.zip 73 | 74 | build: 75 | needs: prepare 76 | if: needs.prepare.outputs.tag 77 | strategy: 78 | matrix: 79 | product: [ leanback, mobile ] 80 | fail-fast: false 81 | runs-on: ubuntu-latest 82 | env: 83 | product: ${{ matrix.product }} 84 | tag: ${{ needs.prepare.outputs.tag }} 85 | outputs: 86 | buildResult: ${{ env.buildResult }} 87 | steps: 88 | - uses: actions/checkout@v3 89 | - uses: actions/download-artifact@v2 90 | - name: Unzip Code 91 | run: | 92 | unzip -d source/ *-source/*-source.zip 93 | rm -rf *-source/ 94 | - name: Release Apk Sign 95 | working-directory: source/ 96 | run: | 97 | signingConfigs='ICAgIHNpZ25pbmdDb25maWdzIHtcCiAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICBteUNvbmZpZyB7XAogICAgICAgICAgICAgICAgc3RvcmVGaWxlIGZpbGUoUkVMRUFTRV9TVE9SRV9GSUxFKVwKICAgICAgICAgICAgICAgIHN0b3JlUGFzc3dvcmQgUkVMRUFTRV9TVE9SRV9QQVNTV09SRFwKICAgICAgICAgICAgICAgIGtleUFsaWFzIFJFTEVBU0VfS0VZX0FMSUFTXAogICAgICAgICAgICAgICAga2V5UGFzc3dvcmQgUkVMRUFTRV9LRVlfUEFTU1dPUkRcCiAgICAgICAgICAgICAgICB2MVNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICB2MlNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICBlbmFibGVWM1NpZ25pbmcgPSB0cnVlXAogICAgICAgICAgICAgICAgZW5hYmxlVjRTaWduaW5nID0gdHJ1ZVwKICAgICAgICAgICAgfVwKICAgICAgICB9XAogICAgfVwKXA==' 98 | signingConfig='ICAgICAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICAgICAgc2lnbmluZ0NvbmZpZyBzaWduaW5nQ29uZmlncy5teUNvbmZpZ1wKICAgICAgICAgICAgfVwK' 99 | signingConfigs="$(echo "$signingConfigs" |base64 -d )" 100 | signingConfig="$(echo "$signingConfig" |base64 -d )" 101 | sed -i -e "/defaultConfig {/i\\$signingConfigs " -e "/defaultConfig {/i\\$lintOptions " -e "/debug {/a\\$signingConfig " -e "/release {/a\\$signingConfig " app/build.gradle 102 | if ! grep -q 'lintOptions' app/build.gradle; then 103 | lintOptions='ICAgIGxpbnRPcHRpb25zIHtcCiAgICAgICAgY2hlY2tSZWxlYXNlQnVpbGRzIGZhbHNlXAogICAgICAgIGFib3J0T25FcnJvciBmYWxzZVwKICAgIH1cClw=' 104 | lintOptions="$(echo "$lintOptions" |base64 -d )" 105 | sed -i "/defaultConfig {/i\\$lintOptions " app/build.gradle 106 | fi 107 | cp -f ${{ github.workspace }}/.github/workflows/TVBoxOSC.jks app/TVBoxOSC.jks 108 | sed -i '$a\RELEASE_STORE_FILE=./TVBoxOSC.jks' ./gradle.properties 109 | sed -i '$a\RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}' ./gradle.properties 110 | sed -i '$a\RELEASE_STORE_PASSWORD=${{ secrets.PW }}' ./gradle.properties 111 | sed -i '$a\RELEASE_KEY_PASSWORD=${{ secrets.PW }}' ./gradle.properties 112 | - name: Build With Gradle 113 | continue-on-error: true 114 | working-directory: source/ 115 | run: | 116 | chmod +x gradlew 117 | ./gradlew assemble${{ env.product }}release --build-cache --parallel --daemon --warning-mode all --stacktrace 118 | - name: Prepare App 119 | run: | 120 | mkdir -p apk/ 121 | for file in `find ~ -name "*.apk" -print`; do 122 | mv "$file" apk/${{ env.appName }}_${{ env.product }}_${{ env.tag }}.apk 123 | echo "buildResult=yes" >> $GITHUB_ENV 124 | done 125 | - name: Upload App To Artifact 126 | uses: actions/upload-artifact@v3 127 | with: 128 | name: ${{ env.appName }}_${{ env.product }}_${{ env.tag }} 129 | path: apk/*.apk 130 | 131 | upload: 132 | needs: [ prepare, build ] 133 | if: needs.build.outputs.buildResult == 'yes' 134 | runs-on: ubuntu-latest 135 | env: 136 | commit: ${{ needs.prepare.outputs.commit }} 137 | tag: ${{ needs.prepare.outputs.tag }} 138 | ESCAPED: ${{ needs.prepare.outputs.ESCAPED }} 139 | steps: 140 | - uses: actions/checkout@v2 141 | - uses: actions/download-artifact@v2 142 | with: 143 | path: artifacts/ 144 | - name: Prepare Files 145 | run: | 146 | mkdir apk 147 | find artifacts -name "*.*" -exec cp {} apk \; 148 | rm -rf artifacts/ 149 | - name: Release and Upload Assets 150 | uses: softprops/action-gh-release@v1 151 | with: 152 | name: ${{ env.tag }} 153 | tag_name: ${{ env.tag }} 154 | body: ${{ env.commit }} 155 | files: | 156 | apk/*.apk 157 | apk/*-source.zip 158 | env: 159 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 160 | - name: Post To Telegram 161 | working-directory: apk/ 162 | run: | 163 | if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then 164 | export apk1=$(find ~ -name "*leanback*.apk") 165 | export apk2=$(find ~ -name "*mobile*.apk") 166 | export sourceCode=$(find ~ -name "*-source.zip") 167 | if [ -s "$apk2" ]; then 168 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2Fapk1%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2Fapk2%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Commit%3A%20${{ env.commit }}%0AChangelog%3A%0A${{ env.ESCAPED }}%22%2C%22parse_mode%22%3A%20%22Markdown%22%7D%5D" -F apk1="@$apk1" -F apk2="@$apk2" -F sourceCode="@$sourceCode" 169 | else 170 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2Fapk1%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Commit%3A%20${{ env.commit }}%0AChangelog%3A%0A${{ env.ESCAPED }}%22%2C%22parse_mode%22%3A%20%22Markdown%22%7D%5D" -F apk1="@$apk1" -F sourceCode="@$sourceCode" 171 | fi 172 | fi 173 | - name: Push to master 174 | run: | 175 | rm -rf apk/ 176 | sed -i "/Updated Commit/c\\+ Updated Commit: ${{ env.commit }}" README.md 177 | sed -i '/url =/d' ./.git/config 178 | git config --local user.name "github-actions[bot]" 179 | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" 180 | git remote set-url --add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" 181 | git add --all 182 | git commit -m "${{ env.commit }}" 183 | git push -u -f origin master 184 | -------------------------------------------------------------------------------- /.github/workflows/AlphaTV.ym: -------------------------------------------------------------------------------- 1 | name: AlphaTV 2 | 3 | on: 4 | schedule: 5 | - cron: 45 0 * * * 6 | workflow_dispatch: 7 | 8 | 9 | env: 10 | userName: lqinyli 11 | repoName: FONGMI-TV 12 | branchName: main 13 | appName: AlphaTV 14 | 15 | jobs: 16 | prepare: 17 | runs-on: ubuntu-latest 18 | outputs: 19 | commit: ${{ env.commit }} 20 | tag: ${{ env.tag }} 21 | ESCAPED: ${{ env.ESCAPED }} 22 | steps: 23 | - name: Checkout 24 | uses: actions/checkout@v3 25 | with: 26 | fetch-depth: 0 27 | - name: Check New Commit 28 | run: | 29 | upStream=https://github.com/${{ env.userName }}/${{ env.repoName }} 30 | echo "upStream=$upStream" >> $GITHUB_ENV 31 | commit=$(curl -sL $upStream/commits/${{ env.branchName }} |grep -o "/${{ env.userName }}/${{ env.repoName }}/commit/[a-z0-9]\+" |head -1 | cut -d\/ -f5) 32 | if ! git log --oneline |grep -q "$commit"; then 33 | echo "commit=$commit" >> $GITHUB_ENV 34 | echo "commitS=${commit:0:7}" >> $GITHUB_ENV 35 | lastCommit=`git log --oneline |grep -o '[a-z0-9]\{40\}' |head -1` 36 | echo "lastCommit=$lastCommit" >> $GITHUB_ENV 37 | echo "lastCommitS=${lastCommit:0:7}" >> $GITHUB_ENV 38 | fi 39 | - name: Checkout Source Code 40 | if: ${{ env.commit }} 41 | run: | 42 | git clone ${{ env.upStream }} ${{ env.repoName }} 43 | cd ${{ env.repoName }} 44 | git checkout ${{ env.commit }} 45 | #zip 46 | zip -q -x ".git/*" -r ${{ env.commitS }}-source.zip . 47 | #tag 48 | tag="$(git log --date=format:'%Y%m%d-%H%M' --pretty=format:%cd ${{ env.commitS }} -1)" 49 | echo "tag=$tag" >> $GITHUB_ENV 50 | - name: Release Changelog 51 | if: ${{ env.commit }} 52 | working-directory: ${{ env.repoName }} 53 | run: | 54 | export LESSCHARSET=utf-8 55 | if [ "${{ env.commit }}" == "${{ env.lastCommit }}" ]; then 56 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")" 57 | else 58 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }}...${{ env.lastCommit }} |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")" 59 | fi 60 | if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ]; then 61 | ESCAPED=$(echo $COMMIT_MESSAGE |sed 's#%[eE]2[0-9a-zA-Z%]\{6\}##g') 62 | else 63 | COMMIT_URL=${{ env.upStream }}/commits/${{ env.branchName }} 64 | ESCAPED="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$COMMIT_URL")" 65 | fi 66 | echo "ESCAPED=$ESCAPED" >> $GITHUB_ENV 67 | - name: Upload Sourcecode To Artifact 68 | uses: actions/upload-artifact@v3 69 | if: ${{ env.commit }} 70 | with: 71 | name: ${{ env.tag }}-source 72 | path: ${{ env.repoName }}/*-source.zip 73 | 74 | build: 75 | needs: prepare 76 | if: needs.prepare.outputs.tag 77 | strategy: 78 | matrix: 79 | product: [ leanback, mobile ] 80 | fail-fast: false 81 | runs-on: ubuntu-latest 82 | env: 83 | product: ${{ matrix.product }} 84 | tag: ${{ needs.prepare.outputs.tag }} 85 | outputs: 86 | buildResult: ${{ env.buildResult }} 87 | steps: 88 | - uses: actions/checkout@v3 89 | - uses: actions/download-artifact@v2 90 | - name: Unzip Code 91 | run: | 92 | unzip -d source/ *-source/*-source.zip 93 | rm -rf *-source/ 94 | - name: Release Apk Sign 95 | working-directory: source/ 96 | run: | 97 | signingConfigs='ICAgIHNpZ25pbmdDb25maWdzIHtcCiAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICBteUNvbmZpZyB7XAogICAgICAgICAgICAgICAgc3RvcmVGaWxlIGZpbGUoUkVMRUFTRV9TVE9SRV9GSUxFKVwKICAgICAgICAgICAgICAgIHN0b3JlUGFzc3dvcmQgUkVMRUFTRV9TVE9SRV9QQVNTV09SRFwKICAgICAgICAgICAgICAgIGtleUFsaWFzIFJFTEVBU0VfS0VZX0FMSUFTXAogICAgICAgICAgICAgICAga2V5UGFzc3dvcmQgUkVMRUFTRV9LRVlfUEFTU1dPUkRcCiAgICAgICAgICAgICAgICB2MVNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICB2MlNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICBlbmFibGVWM1NpZ25pbmcgPSB0cnVlXAogICAgICAgICAgICAgICAgZW5hYmxlVjRTaWduaW5nID0gdHJ1ZVwKICAgICAgICAgICAgfVwKICAgICAgICB9XAogICAgfVwKXA==' 98 | signingConfig='ICAgICAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICAgICAgc2lnbmluZ0NvbmZpZyBzaWduaW5nQ29uZmlncy5teUNvbmZpZ1wKICAgICAgICAgICAgfVwK' 99 | signingConfigs="$(echo "$signingConfigs" |base64 -d )" 100 | signingConfig="$(echo "$signingConfig" |base64 -d )" 101 | sed -i -e "/defaultConfig {/i\\$signingConfigs " -e "/defaultConfig {/i\\$lintOptions " -e "/debug {/a\\$signingConfig " -e "/release {/a\\$signingConfig " app/build.gradle 102 | if ! grep -q 'lintOptions' app/build.gradle; then 103 | lintOptions='ICAgIGxpbnRPcHRpb25zIHtcCiAgICAgICAgY2hlY2tSZWxlYXNlQnVpbGRzIGZhbHNlXAogICAgICAgIGFib3J0T25FcnJvciBmYWxzZVwKICAgIH1cClw=' 104 | lintOptions="$(echo "$lintOptions" |base64 -d )" 105 | sed -i "/defaultConfig {/i\\$lintOptions " app/build.gradle 106 | fi 107 | cp -f ${{ github.workspace }}/.github/workflows/TVBoxOSC.jks app/TVBoxOSC.jks 108 | sed -i '$a\RELEASE_STORE_FILE=./TVBoxOSC.jks' ./gradle.properties 109 | sed -i '$a\RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}' ./gradle.properties 110 | sed -i '$a\RELEASE_STORE_PASSWORD=${{ secrets.PW }}' ./gradle.properties 111 | sed -i '$a\RELEASE_KEY_PASSWORD=${{ secrets.PW }}' ./gradle.properties 112 | - name: Build With Gradle 113 | continue-on-error: true 114 | working-directory: source/ 115 | run: | 116 | chmod +x gradlew 117 | ./gradlew assemble${{ env.product }}release --build-cache --parallel --daemon --warning-mode all --stacktrace 118 | - name: Prepare App 119 | run: | 120 | mkdir -p apk/ 121 | for file in `find ~ -name "*.apk" -print`; do 122 | mv "$file" apk/${{ env.appName }}_${{ env.product }}_${{ env.tag }}.apk 123 | echo "buildResult=yes" >> $GITHUB_ENV 124 | done 125 | - name: Upload App To Artifact 126 | uses: actions/upload-artifact@v3 127 | with: 128 | name: ${{ env.appName }}_${{ env.product }}_${{ env.tag }} 129 | path: apk/*.apk 130 | 131 | upload: 132 | needs: [ prepare, build ] 133 | if: needs.build.outputs.buildResult == 'yes' 134 | runs-on: ubuntu-latest 135 | env: 136 | commit: ${{ needs.prepare.outputs.commit }} 137 | tag: ${{ needs.prepare.outputs.tag }} 138 | ESCAPED: ${{ needs.prepare.outputs.ESCAPED }} 139 | steps: 140 | - uses: actions/checkout@v2 141 | - uses: actions/download-artifact@v2 142 | with: 143 | path: artifacts/ 144 | - name: Prepare Files 145 | run: | 146 | mkdir apk 147 | find artifacts -name "*.*" -exec cp {} apk \; 148 | rm -rf artifacts/ 149 | - name: Release and Upload Assets 150 | uses: softprops/action-gh-release@v1 151 | with: 152 | name: ${{ env.tag }} 153 | tag_name: ${{ env.tag }} 154 | body: ${{ env.commit }} 155 | files: | 156 | apk/*.apk 157 | apk/*-source.zip 158 | env: 159 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 160 | - name: Post To Telegram 161 | working-directory: apk/ 162 | run: | 163 | if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then 164 | export apk1=$(find ~ -name "*leanback*.apk") 165 | export apk2=$(find ~ -name "*mobile*.apk") 166 | export sourceCode=$(find ~ -name "*-source.zip") 167 | if [ -s "$apk2" ]; then 168 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2Fapk1%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2Fapk2%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Commit%3A%20${{ env.commit }}%0AChangelog%3A%0A${{ env.ESCAPED }}%22%2C%22parse_mode%22%3A%20%22Markdown%22%7D%5D" -F apk1="@$apk1" -F apk2="@$apk2" -F sourceCode="@$sourceCode" 169 | else 170 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2Fapk1%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Commit%3A%20${{ env.commit }}%0AChangelog%3A%0A${{ env.ESCAPED }}%22%2C%22parse_mode%22%3A%20%22Markdown%22%7D%5D" -F apk1="@$apk1" -F sourceCode="@$sourceCode" 171 | fi 172 | fi 173 | - name: Push to master 174 | run: | 175 | rm -rf apk/ 176 | sed -i "/Updated Commit/c\\+ Updated Commit: ${{ env.commit }}" README.md 177 | sed -i '/url =/d' ./.git/config 178 | git config --local user.name "github-actions[bot]" 179 | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" 180 | git remote set-url --add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" 181 | git add --all 182 | git commit -m "${{ env.commit }}" 183 | git push -u -f origin master 184 | -------------------------------------------------------------------------------- /.github/workflows/BearTV.ym: -------------------------------------------------------------------------------- 1 | name: Auto Build 2 | 3 | on: 4 | schedule: 5 | - cron: 5 3 * * * 6 | push: 7 | branches: 8 | - main 9 | pull_request: 10 | workflow_dispatch: 11 | 12 | jobs: 13 | build: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v3 18 | with: 19 | fetch-depth: 0 20 | - name: Check New Commit 21 | run: | 22 | upstreamCode=https://github.com/lqinyli/FONGMI-TV 23 | echo "upstreamCode=$upstreamCode" >> $GITHUB_ENV 24 | commit=$(curl -sL $upstreamCode/commits/main |grep -o '/lqinyli/FONGMI-TV/commit/[a-z0-9]\+' |head -1 | cut -d\/ -f5) 25 | if ! git log --oneline |grep -q "$commit"; then 26 | echo "commit=$commit" >> $GITHUB_ENV 27 | echo "commitS=${commit:0:7}" >> $GITHUB_ENV 28 | fi 29 | - name: Checkout Source Code and Zip 30 | if: ${{ env.commit }} 31 | run: | 32 | git clone ${{ env.upstreamCode }} BearTV 33 | cd BearTV 34 | git checkout ${{ env.commit }} 35 | echo "tag=$(git log --date=format:'%Y%m%d-%H%M' --pretty=format:%cd ${{ env.commitS }} -1)" >> $GITHUB_ENV 36 | zip -q -x ".git/*" -r ${{ env.commitS }}-source.zip . 37 | - name: Release Apk Sign 38 | if: ${{ env.commit }} 39 | working-directory: BearTV 40 | run: | 41 | signingConfigs='ICAgIHNpZ25pbmdDb25maWdzIHtcCiAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICBteUNvbmZpZyB7XAogICAgICAgICAgICAgICAgc3RvcmVGaWxlIGZpbGUoUkVMRUFTRV9TVE9SRV9GSUxFKVwKICAgICAgICAgICAgICAgIHN0b3JlUGFzc3dvcmQgUkVMRUFTRV9TVE9SRV9QQVNTV09SRFwKICAgICAgICAgICAgICAgIGtleUFsaWFzIFJFTEVBU0VfS0VZX0FMSUFTXAogICAgICAgICAgICAgICAga2V5UGFzc3dvcmQgUkVMRUFTRV9LRVlfUEFTU1dPUkRcCiAgICAgICAgICAgICAgICB2MVNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICB2MlNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICBlbmFibGVWM1NpZ25pbmcgPSB0cnVlXAogICAgICAgICAgICAgICAgZW5hYmxlVjRTaWduaW5nID0gdHJ1ZVwKICAgICAgICAgICAgfVwKICAgICAgICB9XAogICAgfVwKXA==' 42 | signingConfig='ICAgICAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICAgICAgc2lnbmluZ0NvbmZpZyBzaWduaW5nQ29uZmlncy5teUNvbmZpZ1wKICAgICAgICAgICAgfVwK' 43 | signingConfigs="$(echo "$signingConfigs" |base64 -d )" 44 | signingConfig="$(echo "$signingConfig" |base64 -d )" 45 | sed -i -e "/defaultConfig {/i\\$signingConfigs " -e "/defaultConfig {/i\\$lintOptions " -e "/debug {/a\\$signingConfig " -e "/release {/a\\$signingConfig " app/build.gradle 46 | if ! grep -q 'lintOptions' app/build.gradle; then 47 | lintOptions='ICAgIGxpbnRPcHRpb25zIHtcCiAgICAgICAgY2hlY2tSZWxlYXNlQnVpbGRzIGZhbHNlXAogICAgICAgIGFib3J0T25FcnJvciBmYWxzZVwKICAgIH1cClw=' 48 | lintOptions="$(echo "$lintOptions" |base64 -d )" 49 | sed -i "/defaultConfig {/i\\$lintOptions " app/build.gradle 50 | fi 51 | cp -f ${{ github.workspace }}/.github/workflows/TVBoxOSC.jks app/TVBoxOSC.jks 52 | sed -i '$a\RELEASE_STORE_FILE=./TVBoxOSC.jks' ./gradle.properties 53 | sed -i '$a\RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}' ./gradle.properties 54 | sed -i '$a\RELEASE_STORE_PASSWORD=${{ secrets.PW }}' ./gradle.properties 55 | sed -i '$a\RELEASE_KEY_PASSWORD=${{ secrets.PW }}' ./gradle.properties 56 | - name: Build Release With Gradle 57 | if: ${{ env.commit }} 58 | working-directory: BearTV 59 | run: | 60 | chmod +x gradlew 61 | ./gradlew assemblerelease --build-cache --parallel --daemon --warning-mode all 62 | 63 | - name: Prepare App 64 | if: ${{ env.commit }} 65 | working-directory: BearTV 66 | run: | 67 | rm -rf apk/ 68 | mkdir -p apk/ 69 | for file in `find ~ -name "*release*.apk" -print`; do 70 | mv "$file" apk/BearTV_Release_${{ env.tag }}.apk 71 | done 72 | 73 | - name: Upload App To Artifact 74 | uses: actions/upload-artifact@v3 75 | if: ${{ env.commit }} 76 | with: 77 | name: BearTV_Release 78 | path: BearTV/apk/* 79 | - name: Release and Upload Assets 80 | uses: softprops/action-gh-release@v1 81 | if: ${{ env.commit }} 82 | with: 83 | name: ${{ env.tag }} 84 | tag_name: ${{ env.tag }} 85 | body: ${{ env.commit }} 86 | files: | 87 | BearTV/apk/* 88 | BearTV/${{ env.commitS }}-source.zip 89 | env: 90 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 91 | - name: Push to master 92 | if: ${{ env.commit }} 93 | run: | 94 | rm -rf BearTV 95 | sed -i "/Updated Commit/c\\+ Updated Commit: ${{ env.commit }}" README.md 96 | git config --local user.name "github-actions[bot]" 97 | git config --local user.email "github-actions[bot]@users.noreply.github.com" 98 | git add --all 99 | -------------------------------------------------------------------------------- /.github/workflows/TVBoxOSC.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/M-LTV/tvbox/b66e1609b94f8d7d0c7ceac9a6b8c08b86b77686/.github/workflows/TVBoxOSC.jks -------------------------------------------------------------------------------- /.github/workflows/diy app.yml: -------------------------------------------------------------------------------- 1 | name: diy app 2 | 3 | on: 4 | schedule: 5 | - cron: 15 19 * * * 6 | workflow_dispatch: 7 | inputs: 8 | rebuild: 9 | description: '忽略构建记录以重新构建' 10 | required: false 11 | type: boolean 12 | donotpublish: 13 | description: '构建后不提交发布新版' 14 | required: false 15 | type: boolean 16 | testOption: 17 | description: 'arm64支持,不支持ijk解码' 18 | required: false 19 | type: boolean 20 | 21 | jobs: 22 | build: 23 | runs-on: ubuntu-latest 24 | strategy: 25 | fail-fast: false 26 | matrix: 27 | include: 28 | - userName: lqinyli 29 | repoName: TVBoxOS-2 30 | branchName: main 31 | appName: STV 32 | - userName: takagen99 33 | repoName: Box 34 | branchName: main 35 | appName: TKG 36 | - userName: q215613905 37 | repoName: TVBoxOS 38 | branchName: main 39 | appName: QTV 40 | - userName: kensonmiao 41 | repoName: CatVodTVOSC 42 | branchName: main 43 | appName: '猫学生' 44 | 45 | steps: 46 | - name: Checkout 47 | uses: actions/checkout@v3 48 | with: 49 | fetch-depth: 0 50 | - name: Check New Commit 51 | run: | 52 | upStream=https://github.com/${{ matrix.userName }}/${{ matrix.repoName }} 53 | echo "upStream=$upStream" >> $GITHUB_ENV 54 | commit=$(curl -sL $upStream/commits/${{ matrix.branchName }} |grep -o "/${{ matrix.userName }}/${{ matrix.repoName }}/commit/[a-z0-9]\+" |head -1 | cut -d\/ -f5) 55 | if ! grep -q "$commit" README.md || [ "${{ inputs.rebuild }}" == "true" ]; then 56 | echo "commit=$commit" >> $GITHUB_ENV 57 | echo "commitS=${commit:0:7}" >> $GITHUB_ENV 58 | fi 59 | - name: Checkout Source Code and Zip 60 | if: ${{ env.commit }} 61 | run: | 62 | git clone ${{ env.upStream }} TVBoxOSC 63 | cd TVBoxOSC 64 | git checkout ${{ env.commit }} 65 | echo "tag=$(git log --date=format:'%Y%m%d-%H%M' --pretty=format:%cd ${{ env.commitS }} -1)" >> $GITHUB_ENV 66 | zip -q -x ".git/*" -r ${{ env.commitS }}-source.zip . 67 | - uses: actions/cache@v3 68 | if: ${{ env.commit }} 69 | with: 70 | path: | 71 | ~/.gradle/caches 72 | ~/.gradle/wrapper 73 | key: ${{ runner.os }}-${{ matrix.userName }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} 74 | restore-keys: | 75 | ${{ runner.os }}-${{ matrix.userName }}- 76 | - name: Extra Modify 77 | if: ${{ env.commit }} 78 | working-directory: TVBoxOSC 79 | run: | 80 | echo '修改VersionName' 81 | sed -i "/versionName/s#[0-9a-zA-Z_\.\'\"-]\+\$#\'${{ env.tag }}\'#" app/build.gradle 82 | sed -i "/android:text=/s#=\"#=\"${{ env.tag }}\\\\n\\\\n#" app/src/main/res/layout/dialog_about.xml 83 | echo 'crosswalk源,防挂' 84 | if grep -q 'crosswalk' build.gradle; then 85 | sed -i "/crosswalk/a\ maven { url 'https://o0halflife0o.github.io/crosswalk/releases/crosswalk/android/maven2' }" build.gradle 86 | else 87 | sed -i "/jitpack.io/a\ maven { url 'https://o0halflife0o.github.io/crosswalk/releases/crosswalk/android/maven2' }" build.gradle 88 | fi 89 | - name: Option For Test 90 | if: ${{ inputs.testOption }} 91 | working-directory: TVBoxOSC 92 | run: | 93 | #添加arm64支持,不支持ijk解码 94 | sed -i "/armeabi-v7a[\'\"]$/s#\$#, 'arm64-v8a'#" app/build.gradle 95 | sed -i "/armeabi-v7a[\'\"]$/s#\$#, 'arm64-v8a'#" player/build.gradle 96 | - name: Release Apk Sign 97 | if: ${{ env.commit }} 98 | working-directory: TVBoxOSC 99 | run: | 100 | signingConfigs='ICAgIHNpZ25pbmdDb25maWdzIHtcCiAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICBteUNvbmZpZyB7XAogICAgICAgICAgICAgICAgc3RvcmVGaWxlIGZpbGUoUkVMRUFTRV9TVE9SRV9GSUxFKVwKICAgICAgICAgICAgICAgIHN0b3JlUGFzc3dvcmQgUkVMRUFTRV9TVE9SRV9QQVNTV09SRFwKICAgICAgICAgICAgICAgIGtleUFsaWFzIFJFTEVBU0VfS0VZX0FMSUFTXAogICAgICAgICAgICAgICAga2V5UGFzc3dvcmQgUkVMRUFTRV9LRVlfUEFTU1dPUkRcCiAgICAgICAgICAgICAgICB2MVNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICB2MlNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICBlbmFibGVWM1NpZ25pbmcgPSB0cnVlXAogICAgICAgICAgICAgICAgZW5hYmxlVjRTaWduaW5nID0gdHJ1ZVwKICAgICAgICAgICAgfVwKICAgICAgICB9XAogICAgfVwKXA==' 101 | signingConfig='ICAgICAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICAgICAgc2lnbmluZ0NvbmZpZyBzaWduaW5nQ29uZmlncy5teUNvbmZpZ1wKICAgICAgICAgICAgfVwK' 102 | signingConfigs="$(echo "$signingConfigs" |base64 -d )" 103 | signingConfig="$(echo "$signingConfig" |base64 -d )" 104 | sed -i -e "/defaultConfig {/i\\$signingConfigs " -e "/debug {/a\\$signingConfig " -e "/release {/a\\$signingConfig " app/build.gradle 105 | cp -f ${{ github.workspace }}/.github/workflows/TVBoxOSC.jks app/TVBoxOSC.jks 106 | sed -i '$a\RELEASE_STORE_FILE=./TVBoxOSC.jks' ./gradle.properties 107 | sed -i '$a\RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}' ./gradle.properties 108 | sed -i '$a\RELEASE_STORE_PASSWORD=${{ secrets.PW }}' ./gradle.properties 109 | sed -i '$a\RELEASE_KEY_PASSWORD=${{ secrets.PW }}' ./gradle.properties 110 | - name: Build With Gradle 111 | if: ${{ env.commit }} 112 | working-directory: TVBoxOSC 113 | run: | 114 | chmod +x gradlew 115 | ./gradlew assemblerelease --build-cache --parallel --daemon --warning-mode all 116 | - name: Prepare App 117 | if: ${{ env.commit }} 118 | working-directory: TVBoxOSC 119 | run: | 120 | rm -rf apk/ 121 | mkdir -p apk/ 122 | for file in `find ~ -name "*release*.apk" -print`; do 123 | mv "$file" apk/${{ matrix.appName }}_${{ env.tag }}.apk 124 | done 125 | - name: Upload App To Artifact 126 | uses: actions/upload-artifact@v3 127 | if: ${{ env.commit }} 128 | with: 129 | name: ${{ matrix.userName }}-${{ matrix.repoName }} 130 | path: TVBoxOSC/apk/* 131 | - name: Whether Or Not to Publish 132 | if: ${{ inputs.donotpublish && env.commit }} 133 | run: | 134 | echo "commit=" >> $GITHUB_ENV 135 | - name: Release and Upload Assets 136 | uses: softprops/action-gh-release@v1 137 | if: ${{ env.commit }} 138 | with: 139 | name: ${{ env.tag }} 140 | tag_name: ${{ env.tag }} 141 | body: "Credit: ${{ matrix.userName }}/${{ matrix.repoName }}\n 142 | Commit: ${{ env.commit }}" 143 | files: | 144 | TVBoxOSC/apk/* 145 | TVBoxOSC/${{ env.commitS }}-source.zip 146 | env: 147 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 148 | - name: Post To Telegram 149 | if: ${{ env.commit }} 150 | run: | 151 | if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then 152 | OUTPUT="${{ github.workspace }}/TVBoxOSC/apk/" 153 | export appRelease=$(find $OUTPUT -name "*${{ matrix.userName }}*.apk") 154 | export sourceCode="${{ github.workspace }}/TVBoxOSC/${{ env.commitS }}-source.zip" 155 | lastCommit=$(grep "${{ matrix.userName }}\/${{ matrix.repoName }}" README.md |grep -o '[a-z0-9]\{40\}') 156 | cd TVBoxOSC 157 | export LESSCHARSET=utf-8 158 | if [ "${{ env.commit }}" == "${lastCommit}" ]; then 159 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#\([&"\/]\)#\\\\\1#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")" 160 | else 161 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }}...${lastCommit:0:7} |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#\([&"\/]\)#\\\\\1#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")" 162 | fi 163 | if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ]; then 164 | ESCAPED="$(echo $COMMIT_MESSAGE |sed 's#%[eE]2[0-9a-zA-Z%]\{6\}##g')" 165 | else 166 | COMMIT_URL=${{ env.upStream }}/commits/${{ matrix.branchName }} 167 | ESCAPED="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$COMMIT_URL")" 168 | fi 169 | #检查源码尺寸,太大则不上传 170 | file_size=$(du -s ${sourceCode} | awk '{print $1}') 171 | #文件最大值,1024代表1M 172 | file_limit_size=20480 173 | if [[ ${file_size} -lt ${file_limit_size} ]];then 174 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Credit%3A%20%23${{ matrix.userName }}%20%0ACommit%3A%20${{ env.commit }}%0AChangelog%3A%0A${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease" -F sourceCode="@$sourceCode" 175 | else 176 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%2C%20%22caption%22%3A%22Credit%3A%20%23${{ matrix.userName }}%20%0ACommit%3A%20${{ env.commit }}%0AChangelog%3A%0A${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease" 177 | fi 178 | fi 179 | - name: Push to master 180 | if: ${{ env.commit }} 181 | run: | 182 | rm -rf TVBoxOSC 183 | sed -i '/url =/d' ./.git/config 184 | git config --local user.name "github-actions[bot]" 185 | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" 186 | git remote set-url --add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" 187 | git pull --rebase 188 | sed -i "/${{ matrix.userName }}\/${{ matrix.repoName }}/s#Updated: [a-zA-Z0-9]*#Updated: ${{ env.commit }}#" README.md 189 | git add --all 190 | git commit -m "${{ env.commit }}" 191 | git push -u -f origin master 192 | -------------------------------------------------------------------------------- /.github/workflows/diy.yml: -------------------------------------------------------------------------------- 1 | name: diy 2 | 3 | on: 4 | schedule: 5 | - cron: 15 18 * * * 6 | workflow_dispatch: 7 | inputs: 8 | rebuild: 9 | description: '忽略构建记录以重新构建' 10 | required: false 11 | type: boolean 12 | donotpublish: 13 | description: '构建后不提交发布新版' 14 | required: false 15 | type: boolean 16 | testOption: 17 | description: 'arm64支持,不支持ijk解码' 18 | required: false 19 | type: boolean 20 | 21 | jobs: 22 | build: 23 | runs-on: ubuntu-latest 24 | strategy: 25 | fail-fast: false 26 | matrix: 27 | include: 28 | - userName: lqinyli 29 | repoName: TVBoxOS-2 30 | branchName: main 31 | appName: STV 32 | - userName: takagen99 33 | repoName: Box 34 | branchName: main 35 | appName: TKG 36 | - userName: q215613905 37 | repoName: TVBoxOS 38 | branchName: main 39 | appName: QTV 40 | - userName: kensonmiao 41 | repoName: CatVodTVOSC 42 | branchName: main 43 | appName: '猫学生' 44 | 45 | steps: 46 | - name: Checkout 47 | uses: actions/checkout@v3 48 | with: 49 | fetch-depth: 0 50 | - name: Check New Commit 51 | run: | 52 | upStream=https://github.com/${{ matrix.userName }}/${{ matrix.repoName }} 53 | echo "upStream=$upStream" >> $GITHUB_ENV 54 | commit=$(curl -sL $upStream/commits/${{ matrix.branchName }} |grep -o "/${{ matrix.userName }}/${{ matrix.repoName }}/commit/[a-z0-9]\+" |head -1 | cut -d\/ -f5) 55 | if ! grep -q "$commit" README.md || [ "${{ inputs.rebuild }}" == "true" ]; then 56 | echo "commit=$commit" >> $GITHUB_ENV 57 | echo "commitS=${commit:0:7}" >> $GITHUB_ENV 58 | fi 59 | - name: Checkout Source Code and Zip 60 | if: ${{ env.commit }} 61 | run: | 62 | git clone ${{ env.upStream }} TVBoxOSC 63 | cd TVBoxOSC 64 | git checkout ${{ env.commit }} 65 | echo "tag=$(git log --date=format:'%Y%m%d-%H%M' --pretty=format:%cd ${{ env.commitS }} -1)" >> $GITHUB_ENV 66 | zip -q -x ".git/*" -r ${{ env.commitS }}-source.zip . 67 | - uses: actions/cache@v3 68 | if: ${{ env.commit }} 69 | with: 70 | path: | 71 | ~/.gradle/caches 72 | ~/.gradle/wrapper 73 | key: ${{ runner.os }}-${{ matrix.userName }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} 74 | restore-keys: | 75 | ${{ runner.os }}-${{ matrix.userName }}- 76 | - name: Extra Modify 77 | if: ${{ env.commit }} 78 | working-directory: TVBoxOSC 79 | run: | 80 | echo '修改VersionName' 81 | sed -i "/versionName/s#[0-9a-zA-Z_\.\'\"-]\+\$#\'${{ env.tag }}\'#" app/build.gradle 82 | sed -i "/android:text=/s#=\"#=\"${{ env.tag }}\\\\n\\\\n#" app/src/main/res/layout/dialog_about.xml 83 | echo 'crosswalk源,防挂' 84 | if grep -q 'crosswalk' build.gradle; then 85 | sed -i "/crosswalk/a\ maven { url 'https://o0halflife0o.github.io/crosswalk/releases/crosswalk/android/maven2' }" build.gradle 86 | else 87 | sed -i "/jitpack.io/a\ maven { url 'https://o0halflife0o.github.io/crosswalk/releases/crosswalk/android/maven2' }" build.gradle 88 | fi 89 | - name: Option For Test 90 | if: ${{ inputs.testOption }} 91 | working-directory: TVBoxOSC 92 | run: | 93 | #添加arm64支持,不支持ijk解码 94 | sed -i "/armeabi-v7a[\'\"]$/s#\$#, 'arm64-v8a'#" app/build.gradle 95 | sed -i "/armeabi-v7a[\'\"]$/s#\$#, 'arm64-v8a'#" player/build.gradle 96 | - name: Release Apk Sign 97 | if: ${{ env.commit }} 98 | working-directory: TVBoxOSC 99 | run: | 100 | signingConfigs='ICAgIHNpZ25pbmdDb25maWdzIHtcCiAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICBteUNvbmZpZyB7XAogICAgICAgICAgICAgICAgc3RvcmVGaWxlIGZpbGUoUkVMRUFTRV9TVE9SRV9GSUxFKVwKICAgICAgICAgICAgICAgIHN0b3JlUGFzc3dvcmQgUkVMRUFTRV9TVE9SRV9QQVNTV09SRFwKICAgICAgICAgICAgICAgIGtleUFsaWFzIFJFTEVBU0VfS0VZX0FMSUFTXAogICAgICAgICAgICAgICAga2V5UGFzc3dvcmQgUkVMRUFTRV9LRVlfUEFTU1dPUkRcCiAgICAgICAgICAgICAgICB2MVNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICB2MlNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICBlbmFibGVWM1NpZ25pbmcgPSB0cnVlXAogICAgICAgICAgICAgICAgZW5hYmxlVjRTaWduaW5nID0gdHJ1ZVwKICAgICAgICAgICAgfVwKICAgICAgICB9XAogICAgfVwKXA==' 101 | signingConfig='ICAgICAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICAgICAgc2lnbmluZ0NvbmZpZyBzaWduaW5nQ29uZmlncy5teUNvbmZpZ1wKICAgICAgICAgICAgfVwK' 102 | signingConfigs="$(echo "$signingConfigs" |base64 -d )" 103 | signingConfig="$(echo "$signingConfig" |base64 -d )" 104 | sed -i -e "/defaultConfig {/i\\$signingConfigs " -e "/debug {/a\\$signingConfig " -e "/release {/a\\$signingConfig " app/build.gradle 105 | cp -f ${{ github.workspace }}/.github/workflows/TVBoxOSC.jks app/TVBoxOSC.jks 106 | sed -i '$a\RELEASE_STORE_FILE=./TVBoxOSC.jks' ./gradle.properties 107 | sed -i '$a\RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}' ./gradle.properties 108 | sed -i '$a\RELEASE_STORE_PASSWORD=${{ secrets.PW }}' ./gradle.properties 109 | sed -i '$a\RELEASE_KEY_PASSWORD=${{ secrets.PW }}' ./gradle.properties 110 | - name: Build With Gradle 111 | if: ${{ env.commit }} 112 | working-directory: TVBoxOSC 113 | run: | 114 | chmod +x gradlew 115 | ./gradlew assemblerelease --build-cache --parallel --daemon --warning-mode all 116 | - name: Prepare App 117 | if: ${{ env.commit }} 118 | working-directory: TVBoxOSC 119 | run: | 120 | rm -rf apk/ 121 | mkdir -p apk/ 122 | for file in `find ~ -name "*release*.apk" -print`; do 123 | mv "$file" apk/${{ matrix.appName }}_${{ env.tag }}.apk 124 | done 125 | - name: Upload App To Artifact 126 | uses: actions/upload-artifact@v3 127 | if: ${{ env.commit }} 128 | with: 129 | name: ${{ matrix.userName }}-${{ matrix.repoName }} 130 | path: TVBoxOSC/apk/* 131 | - name: Whether Or Not to Publish 132 | if: ${{ inputs.donotpublish && env.commit }} 133 | run: | 134 | echo "commit=" >> $GITHUB_ENV 135 | - name: Release and Upload Assets 136 | uses: softprops/action-gh-release@v1 137 | if: ${{ env.commit }} 138 | with: 139 | name: ${{ env.tag }} 140 | tag_name: ${{ env.tag }} 141 | body: "Credit: ${{ matrix.userName }}/${{ matrix.repoName }}\n 142 | Commit: ${{ env.commit }}" 143 | files: | 144 | TVBoxOSC/apk/* 145 | TVBoxOSC/${{ env.commitS }}-source.zip 146 | env: 147 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 148 | - name: Upload App To Artifact 149 | uses: actions/upload-artifact@v3 150 | if: ${{ env.commit }} 151 | with: 152 | name: com.github.tvbox.osc 153 | path: TVBoxOSC/apk/* 154 | - name: Release and Upload Assets 155 | uses: softprops/action-gh-release@v1 156 | if: ${{ env.commit }} 157 | with: 158 | name: ${{ env.tag }} 159 | tag_name: ${{ env.tag }} 160 | body: ${{ env.commit }} 161 | files: | 162 | TVBoxOSC/apk/* 163 | TVBoxOSC/${{ env.commitS }}-source-q215613905.zip 164 | env: 165 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 166 | - name: Post To Telegram 167 | if: ${{ env.commit }} 168 | run: | 169 | if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then 170 | OUTPUT="${{ github.workspace }}/TVBoxOSC/apk/" 171 | export appRelease=$(find $OUTPUT -name "*release*.apk") 172 | export sourceCode="${{ github.workspace }}/TVBoxOSC/${{ env.commitS }}-source-q215613905.zip" 173 | lastCommit=`git log --oneline |grep -o '[a-z0-9]\{40\}' |head -1` 174 | cd TVBoxOSC 175 | export LESSCHARSET=utf-8 176 | if [ "${{ env.commit }}" == "${lastCommit}" ]; then 177 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |sort -u`")" 178 | else 179 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }}...${lastCommit:0:7} |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |sort -u`")" 180 | fi 181 | #if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ] && echo "${COMMIT_MESSAGE}" |grep -qv '%22'; then 182 | if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ]; then 183 | ESCAPED="$COMMIT_MESSAGE" 184 | else 185 | COMMIT_URL=${{ env.upstreamCode }}/commits/main 186 | ESCAPED="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$COMMIT_URL")" 187 | fi 188 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Commit%3A%20${{ env.commit }}%0AChangelog%3A%0A${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease" -F sourceCode="@$sourceCode" 189 | fi 190 | - name: Post To Telegram 191 | if: ${{ env.commit }} 192 | run: | 193 | if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then 194 | OUTPUT="${{ github.workspace }}/TVBoxOSC/apk/" 195 | export appRelease=$(find $OUTPUT -name "*${{ matrix.userName }}*.apk") 196 | export sourceCode="${{ github.workspace }}/TVBoxOSC/${{ env.commitS }}-source.zip" 197 | lastCommit=$(grep "${{ matrix.userName }}\/${{ matrix.repoName }}" README.md |grep -o '[a-z0-9]\{40\}') 198 | cd TVBoxOSC 199 | export LESSCHARSET=utf-8 200 | if [ "${{ env.commit }}" == "${lastCommit}" ]; then 201 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |sort -u`")" 202 | else 203 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }}...${lastCommit:0:7} |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |sort -u`")" 204 | fi 205 | #if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ] && echo "${COMMIT_MESSAGE}" |grep -qv '%22'; then 206 | if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ]; then 207 | ESCAPED="$COMMIT_MESSAGE" 208 | else 209 | COMMIT_URL=${{ env.upstreamCode }}/commits/main 210 | ESCAPED="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$COMMIT_URL")" 211 | fi 212 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Commit%3A%20${{ env.commit }}%0AChangelog%3A%0A${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease" -F sourceCode="@$sourceCode" 213 | fi 214 | - name: Push to master 215 | if: ${{ env.commit }} 216 | run: | 217 | rm -rf TVBoxOSC 218 | sed -i '/url =/d' ./.git/config 219 | git config --local user.name "github-actions[bot]" 220 | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" 221 | git remote set-url --add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" 222 | git pull --rebase 223 | sed -i "/${{ matrix.userName }}\/${{ matrix.repoName }}/s#Updated: [a-zA-Z0-9]*#Updated: ${{ env.commit }}#" README.md 224 | git add --all 225 | git commit -m "${{ env.commit }}" 226 | git push -u -f origin master 227 | -------------------------------------------------------------------------------- /.github/workflows/stv.yml: -------------------------------------------------------------------------------- 1 | name: stv 2 | 3 | on: 4 | schedule: 5 | - cron: 15 18 * * * 6 | push: 7 | branches: 8 | - master 9 | workflow_dispatch: 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | strategy: 15 | fail-fast: false 16 | matrix: 17 | include: 18 | - userName: lqinyli 19 | repoName: TVBoxOSC-2 20 | branchName: main 21 | 22 | steps: 23 | - name: Checkout 24 | uses: actions/checkout@v3 25 | with: 26 | fetch-depth: 0 27 | - name: Check New Commit 28 | run: | 29 | upStream=https://github.com/${{ matrix.userName }}/${{ matrix.repoName }} 30 | echo "upStream=$upStream" >> $GITHUB_ENV 31 | commit=$(curl -sL $upStream/commits/main |grep -o "/${{ matrix.userName }}/${{ matrix.repoName }}/commit/[a-z0-9]\+" |head -1 | cut -d\/ -f5) 32 | #if ! git log --oneline |grep -q "$commit"; then 33 | if ! grep -q "$commit" README.md; then 34 | echo "commit=$commit" >> $GITHUB_ENV 35 | echo "commitS=${commit:0:7}" >> $GITHUB_ENV 36 | fi 37 | - name: Checkout Source Code and Zip 38 | if: ${{ env.commit }} 39 | run: | 40 | git clone ${{ env.upStream }} TVBoxOSC 41 | cd TVBoxOSC 42 | git checkout ${{ env.commit }} 43 | echo "tag=$(git log --date=format:'%Y%m%d-%H%M' --pretty=format:%cd ${{ env.commitS }} -1)" >> $GITHUB_ENV 44 | zip -q -x ".git/*" -r ${{ env.commitS }}-source.zip . 45 | - name: Release Apk Sign 46 | if: ${{ env.commit }} 47 | working-directory: TVBoxOSC 48 | run: | 49 | signingConfigs='ICAgIHNpZ25pbmdDb25maWdzIHtcCiAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICBteUNvbmZpZyB7XAogICAgICAgICAgICAgICAgc3RvcmVGaWxlIGZpbGUoUkVMRUFTRV9TVE9SRV9GSUxFKVwKICAgICAgICAgICAgICAgIHN0b3JlUGFzc3dvcmQgUkVMRUFTRV9TVE9SRV9QQVNTV09SRFwKICAgICAgICAgICAgICAgIGtleUFsaWFzIFJFTEVBU0VfS0VZX0FMSUFTXAogICAgICAgICAgICAgICAga2V5UGFzc3dvcmQgUkVMRUFTRV9LRVlfUEFTU1dPUkRcCiAgICAgICAgICAgICAgICB2MVNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICB2MlNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICBlbmFibGVWM1NpZ25pbmcgPSB0cnVlXAogICAgICAgICAgICAgICAgZW5hYmxlVjRTaWduaW5nID0gdHJ1ZVwKICAgICAgICAgICAgfVwKICAgICAgICB9XAogICAgfVwKXA==' 50 | signingConfig='ICAgICAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICAgICAgc2lnbmluZ0NvbmZpZyBzaWduaW5nQ29uZmlncy5teUNvbmZpZ1wKICAgICAgICAgICAgfVwK' 51 | signingConfigs="$(echo "$signingConfigs" |base64 -d )" 52 | signingConfig="$(echo "$signingConfig" |base64 -d )" 53 | sed -i -e "/defaultConfig {/i\\$signingConfigs " -e "/debug {/a\\$signingConfig " -e "/release {/a\\$signingConfig " app/build.gradle 54 | cp -f ${{ github.workspace }}/.github/workflows/TVBoxOSC.jks app/TVBoxOSC.jks 55 | sed -i '$a\RELEASE_STORE_FILE=./TVBoxOSC.jks' ./gradle.properties 56 | sed -i '$a\RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}' ./gradle.properties 57 | sed -i '$a\RELEASE_STORE_PASSWORD=${{ secrets.PW }}' ./gradle.properties 58 | sed -i '$a\RELEASE_KEY_PASSWORD=${{ secrets.PW }}' ./gradle.properties 59 | - name: Build With Gradle 60 | if: ${{ env.commit }} 61 | working-directory: TVBoxOSC 62 | run: | 63 | chmod +x gradlew 64 | ./gradlew assemblerelease --build-cache --parallel --daemon --warning-mode all 65 | - name: Prepare App 66 | if: ${{ env.commit }} 67 | working-directory: TVBoxOSC 68 | run: | 69 | rm -rf apk/ 70 | mkdir -p apk/ 71 | for file in `find ~ -name "*release*.apk" -print`; do 72 | mv "$file" apk/TVBox_release_${{ env.tag }}.apk 73 | done 74 | - name: Upload App To Artifact 75 | uses: actions/upload-artifact@v3 76 | if: ${{ env.commit }} 77 | with: 78 | name: ${{ matrix.userName }}-${{ matrix.repoName }} 79 | path: TVBoxOSC/apk/* 80 | - name: Release and Upload Assets 81 | uses: softprops/action-gh-release@v1 82 | if: ${{ env.commit }} 83 | with: 84 | name: ${{ env.tag }} 85 | tag_name: ${{ env.tag }} 86 | body: "Credit: ${{ matrix.userName }}/${{ matrix.repoName }}\n 87 | Commit: ${{ env.commit }}" 88 | files: | 89 | TVBoxOSC/apk/* 90 | TVBoxOSC/${{ env.commitS }}-source.zip 91 | env: 92 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 93 | - name: Post To Telegram 94 | if: ${{ env.commit }} 95 | run: | 96 | if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then 97 | OUTPUT="${{ github.workspace }}/TVBoxOSC/apk/" 98 | export appRelease=$(find $OUTPUT -name "*release*.apk") 99 | export sourceCode="${{ github.workspace }}/TVBoxOSC/${{ env.commitS }}-source.zip" 100 | #lastCommit=`git log --oneline |grep -o '[a-z0-9]\{40\}' |head -1` 101 | lastCommit=$(grep "${{ matrix.userName }}\/${{ matrix.repoName }}" README.md |grep -o '[a-z0-9]\{40\}') 102 | cd TVBoxOSC 103 | export LESSCHARSET=utf-8 104 | if [ "${{ env.commit }}" == "${lastCommit}" ]; then 105 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")" 106 | else 107 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }}...${lastCommit:0:7} |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")" 108 | fi 109 | if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ]; then 110 | ESCAPED="$(echo $COMMIT_MESSAGE |sed 's#%[eE]2[0-9a-zA-Z%]\{6\}##g')" 111 | else 112 | COMMIT_URL=${{ env.upStream }}/commits/${{ matrix.branchName }} 113 | ESCAPED="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$COMMIT_URL")" 114 | fi 115 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Credit%3A%20%23${{ matrix.userName }}%20%0ACommit%3A%20${{ env.commit }}%0AChangelog%3A%0A${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease" -F sourceCode="@$sourceCode" 116 | fi 117 | - name: Push to master 118 | if: ${{ env.commit }} 119 | run: | 120 | rm -rf SJTV 121 | sed -i "/${{ matrix.userName }}\/${{ matrix.repoName }}/s#Updated: [a-zA-Z0-9]*#Updated: ${{ env.commit }}#" README.md 122 | sed -i '/url =/d' ./.git/config 123 | git config --local user.name "github-actions[bot]" 124 | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" 125 | git remote set-url --add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" 126 | git add --all 127 | git commit -m "${{ env.commit }}" 128 | git push -u -f origin master 129 | -------------------------------------------------------------------------------- /.github/workflows/tg-tv.ym: -------------------------------------------------------------------------------- 1 | name: TG TV 2 | 3 | on: 4 | schedule: 5 | - cron: 15 5 * * * 6 | push: 7 | branches: 8 | - master 9 | workflow_dispatch: 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@v3 17 | with: 18 | fetch-depth: 0 19 | - name: Check New Commit 20 | run: | 21 | upstreamCode=https://github.com/lqinyli/TVBoxOS-2 22 | echo "upstreamCode=$upstreamCode" >> $GITHUB_ENV 23 | commit=$(curl -sL $upstreamCode/commits/main |grep -o '/lqinyli/TVBoxOS-2/commit/[a-z0-9]\+' |head -1 | cut -d\/ -f5) 24 | if ! git log --oneline |grep -q "$commit"; then 25 | echo "commit=$commit" >> $GITHUB_ENV 26 | echo "commitS=${commit:0:7}" >> $GITHUB_ENV 27 | fi 28 | - name: Checkout Source Code and Zip 29 | if: ${{ env.commit }} 30 | run: | 31 | git clone ${{ env.upstreamCode }} TVBoxOSC 32 | cd TVBoxOSC 33 | git checkout ${{ env.commit }} 34 | echo "tag=$(git log --date=format:'%Y%m%d-%H%M' --pretty=format:%cd ${{ env.commitS }} -1)" >> $GITHUB_ENV 35 | zip -q -x ".git/*" -r ${{ env.commitS }}-source-q215613905.zip . 36 | - name: Release Apk Sign 37 | if: ${{ env.commit }} 38 | working-directory: TVBoxOSC 39 | run: | 40 | signingConfigs='ICAgIHNpZ25pbmdDb25maWdzIHtcCiAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICBteUNvbmZpZyB7XAogICAgICAgICAgICAgICAgc3RvcmVGaWxlIGZpbGUoUkVMRUFTRV9TVE9SRV9GSUxFKVwKICAgICAgICAgICAgICAgIHN0b3JlUGFzc3dvcmQgUkVMRUFTRV9TVE9SRV9QQVNTV09SRFwKICAgICAgICAgICAgICAgIGtleUFsaWFzIFJFTEVBU0VfS0VZX0FMSUFTXAogICAgICAgICAgICAgICAga2V5UGFzc3dvcmQgUkVMRUFTRV9LRVlfUEFTU1dPUkRcCiAgICAgICAgICAgICAgICB2MVNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICB2MlNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICBlbmFibGVWM1NpZ25pbmcgPSB0cnVlXAogICAgICAgICAgICAgICAgZW5hYmxlVjRTaWduaW5nID0gdHJ1ZVwKICAgICAgICAgICAgfVwKICAgICAgICB9XAogICAgfVwKXA==' 41 | signingConfig='ICAgICAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICAgICAgc2lnbmluZ0NvbmZpZyBzaWduaW5nQ29uZmlncy5teUNvbmZpZ1wKICAgICAgICAgICAgfVwK' 42 | signingConfigs="$(echo "$signingConfigs" |base64 -d )" 43 | signingConfig="$(echo "$signingConfig" |base64 -d )" 44 | sed -i -e "/defaultConfig {/i\\$signingConfigs " -e "/debug {/a\\$signingConfig " -e "/release {/a\\$signingConfig " app/build.gradle 45 | cp -f ${{ github.workspace }}/.github/workflows/TVBoxOSC.jks app/TVBoxOSC.jks 46 | sed -i '$a\RELEASE_STORE_FILE=./TVBoxOSC.jks' ./gradle.properties 47 | sed -i '$a\RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}' ./gradle.properties 48 | sed -i '$a\RELEASE_STORE_PASSWORD=${{ secrets.PW }}' ./gradle.properties 49 | sed -i '$a\RELEASE_KEY_PASSWORD=${{ secrets.PW }}' ./gradle.properties 50 | - name: Build With Gradle 51 | if: ${{ env.commit }} 52 | working-directory: TVBoxOSC 53 | run: | 54 | chmod +x gradlew 55 | ./gradlew assemblerelease --build-cache --parallel --daemon --warning-mode all 56 | - name: Prepare App 57 | if: ${{ env.commit }} 58 | working-directory: TVBoxOSC 59 | run: | 60 | rm -rf apk/ 61 | mkdir -p apk/ 62 | for file in `find ~ -name "*release*.apk" -print`; do 63 | mv "$file" apk/STV_release_${{ env.tag }}.apk 64 | done 65 | - name: Upload App To Artifact 66 | uses: actions/upload-artifact@v3 67 | if: ${{ env.commit }} 68 | with: 69 | name: com.github.tvbox.osc 70 | path: TVBoxOSC/apk/* 71 | - name: Release and Upload Assets 72 | uses: softprops/action-gh-release@v1 73 | if: ${{ env.commit }} 74 | with: 75 | name: ${{ env.tag }} 76 | tag_name: ${{ env.tag }} 77 | body: ${{ env.commit }} 78 | files: | 79 | TVBoxOSC/apk/* 80 | TVBoxOSC/${{ env.commitS }}-source-q215613905.zip 81 | env: 82 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 83 | - name: Post To Telegram 84 | if: ${{ env.commit }} 85 | run: | 86 | if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then 87 | OUTPUT="${{ github.workspace }}/TVBoxOSC/apk/" 88 | export appRelease=$(find $OUTPUT -name "*release*.apk") 89 | export sourceCode="${{ github.workspace }}/TVBoxOSC/${{ env.commitS }}-source-q215613905.zip" 90 | lastCommit=`git log --oneline |grep -o '[a-z0-9]\{40\}' |head -1` 91 | cd TVBoxOSC 92 | export LESSCHARSET=utf-8 93 | if [ "${{ env.commit }}" == "${lastCommit}" ]; then 94 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |sort -u`")" 95 | else 96 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }}...${lastCommit:0:7} |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |sort -u`")" 97 | fi 98 | #if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ] && echo "${COMMIT_MESSAGE}" |grep -qv '%22'; then 99 | if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ]; then 100 | ESCAPED="$COMMIT_MESSAGE" 101 | else 102 | COMMIT_URL=${{ env.upstreamCode }}/commits/main 103 | ESCAPED="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$COMMIT_URL")" 104 | fi 105 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Commit%3A%20${{ env.commit }}%0AChangelog%3A%0A${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease" -F sourceCode="@$sourceCode" 106 | fi 107 | - name: Push to master 108 | if: ${{ env.commit }} 109 | run: | 110 | rm -rf TVBoxOSC-2 111 | sed -i "/Updated Commit/c\\+ Updated Commit: ${{ env.commit }}" README.md 112 | sed -i '/url =/d' ./.git/config 113 | git config --local user.name "github-actions[bot]" 114 | git config --local user.email "github-actions[bot]@users.noreply.github.com" 115 | git remote set-url --add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" 116 | git add --all 117 | git commit -m "${{ env.commit }}" 118 | git push -u -f origin master 119 | -------------------------------------------------------------------------------- /.github/workflows/tg-tvbox-2.yml: -------------------------------------------------------------------------------- 1 | name: TG TVBox-2 2 | 3 | on: 4 | schedule: 5 | - cron: 15 1 * * * 6 | push: 7 | branches: 8 | - master 9 | workflow_dispatch: 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@v3 17 | with: 18 | fetch-depth: 0 19 | - name: Check New Commit 20 | run: | 21 | upstreamCode=https://github.com/lqinyli/TVBoxOS-2 22 | echo "upstreamCode=$upstreamCode" >> $GITHUB_ENV 23 | commit=$(curl -sL $upstreamCode/commits/diy |grep -o '/lqinyli/TVBoxOS-2/commit/[a-z0-9]\+' |head -1 | cut -d\/ -f5) 24 | if ! git log --oneline |grep -q "$commit"; then 25 | echo "commit=$commit" >> $GITHUB_ENV 26 | echo "commitS=${commit:0:7}" >> $GITHUB_ENV 27 | fi 28 | - name: Checkout Source Code and Zip 29 | if: ${{ env.commit }} 30 | run: | 31 | git clone ${{ env.upstreamCode }} TVBoxOSC 32 | cd TVBoxOSC 33 | git checkout ${{ env.commit }} 34 | echo "tag=$(git log --date=format:'%Y%m%d-%H%M' --pretty=format:%cd ${{ env.commitS }} -1)" >> $GITHUB_ENV 35 | zip -q -x ".git/*" -r ${{ env.commitS }}-source-q215613905.zip . 36 | - name: Release Apk Sign 37 | if: ${{ env.commit }} 38 | working-directory: TVBoxOSC 39 | run: | 40 | signingConfigs='ICAgIHNpZ25pbmdDb25maWdzIHtcCiAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICBteUNvbmZpZyB7XAogICAgICAgICAgICAgICAgc3RvcmVGaWxlIGZpbGUoUkVMRUFTRV9TVE9SRV9GSUxFKVwKICAgICAgICAgICAgICAgIHN0b3JlUGFzc3dvcmQgUkVMRUFTRV9TVE9SRV9QQVNTV09SRFwKICAgICAgICAgICAgICAgIGtleUFsaWFzIFJFTEVBU0VfS0VZX0FMSUFTXAogICAgICAgICAgICAgICAga2V5UGFzc3dvcmQgUkVMRUFTRV9LRVlfUEFTU1dPUkRcCiAgICAgICAgICAgICAgICB2MVNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICB2MlNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICBlbmFibGVWM1NpZ25pbmcgPSB0cnVlXAogICAgICAgICAgICAgICAgZW5hYmxlVjRTaWduaW5nID0gdHJ1ZVwKICAgICAgICAgICAgfVwKICAgICAgICB9XAogICAgfVwKXA==' 41 | signingConfig='ICAgICAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICAgICAgc2lnbmluZ0NvbmZpZyBzaWduaW5nQ29uZmlncy5teUNvbmZpZ1wKICAgICAgICAgICAgfVwK' 42 | signingConfigs="$(echo "$signingConfigs" |base64 -d )" 43 | signingConfig="$(echo "$signingConfig" |base64 -d )" 44 | sed -i -e "/defaultConfig {/i\\$signingConfigs " -e "/debug {/a\\$signingConfig " -e "/release {/a\\$signingConfig " app/build.gradle 45 | cp -f ${{ github.workspace }}/.github/workflows/TVBoxOSC.jks app/TVBoxOSC.jks 46 | sed -i '$a\RELEASE_STORE_FILE=./TVBoxOSC.jks' ./gradle.properties 47 | sed -i '$a\RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}' ./gradle.properties 48 | sed -i '$a\RELEASE_STORE_PASSWORD=${{ secrets.PW }}' ./gradle.properties 49 | sed -i '$a\RELEASE_KEY_PASSWORD=${{ secrets.PW }}' ./gradle.properties 50 | - name: Build With Gradle 51 | if: ${{ env.commit }} 52 | working-directory: TVBoxOSC 53 | run: | 54 | chmod +x gradlew 55 | ./gradlew assemblerelease --build-cache --parallel --daemon --warning-mode all 56 | - name: Prepare App 57 | if: ${{ env.commit }} 58 | working-directory: TVBoxOSC 59 | run: | 60 | rm -rf apk/ 61 | mkdir -p apk/ 62 | for file in `find ~ -name "*release*.apk" -print`; do 63 | mv "$file" apk/TVBox_release_${{ env.tag }}.apk 64 | done 65 | - name: Upload App To Artifact 66 | uses: actions/upload-artifact@v3 67 | if: ${{ env.commit }} 68 | with: 69 | name: com.github.tvbox.osc 70 | path: TVBoxOSC/apk/* 71 | - name: Release and Upload Assets 72 | uses: softprops/action-gh-release@v1 73 | if: ${{ env.commit }} 74 | with: 75 | name: ${{ env.tag }} 76 | tag_name: ${{ env.tag }} 77 | body: ${{ env.commit }} 78 | files: | 79 | TVBoxOSC/apk/* 80 | TVBoxOSC/${{ env.commitS }}-source-q215613905.zip 81 | env: 82 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 83 | - name: Post To Telegram 84 | if: ${{ env.commit }} 85 | run: | 86 | if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then 87 | OUTPUT="${{ github.workspace }}/TVBoxOSC/apk/" 88 | export appRelease=$(find $OUTPUT -name "*release*.apk") 89 | export sourceCode="${{ github.workspace }}/TVBoxOSC/${{ env.commitS }}-source-q215613905.zip" 90 | lastCommit=`git log --oneline |grep -o '[a-z0-9]\{40\}' |head -1` 91 | cd TVBoxOSC 92 | export LESSCHARSET=utf-8 93 | if [ "${{ env.commit }}" == "${lastCommit}" ]; then 94 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |sort -u`")" 95 | else 96 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }}...${lastCommit:0:7} |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |sort -u`")" 97 | fi 98 | #if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ] && echo "${COMMIT_MESSAGE}" |grep -qv '%22'; then 99 | if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ]; then 100 | ESCAPED="$COMMIT_MESSAGE" 101 | else 102 | COMMIT_URL=${{ env.upstreamCode }}/commits/main 103 | ESCAPED="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$COMMIT_URL")" 104 | fi 105 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Commit%3A%20${{ env.commit }}%0AChangelog%3A%0A${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease" -F sourceCode="@$sourceCode" 106 | fi 107 | - name: Push to master 108 | if: ${{ env.commit }} 109 | run: | 110 | rm -rf TVBoxOSC-2 111 | sed -i "/Updated Commit/c\\+ Updated Commit: ${{ env.commit }}" README.md 112 | sed -i '/url =/d' ./.git/config 113 | git config --local user.name "github-actions[bot]" 114 | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" 115 | git remote set-url --add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" 116 | git add --all 117 | git commit -m "${{ env.commit }}" 118 | git push -u -f origin master 119 | -------------------------------------------------------------------------------- /.github/workflows/tvb taka.yml: -------------------------------------------------------------------------------- 1 | name: tvb & taka 2 | 3 | on: 4 | schedule: 5 | - cron: 15 23 * * * 6 | workflow_dispatch: 7 | inputs: 8 | rebuild: 9 | description: '忽略构建记录以重新构建' 10 | required: false 11 | type: boolean 12 | donotpublish: 13 | description: '构建后不提交发布新版' 14 | required: false 15 | type: boolean 16 | testOption: 17 | description: 'arm64支持,不支持ijk解码' 18 | required: false 19 | type: boolean 20 | 21 | jobs: 22 | build: 23 | runs-on: ubuntu-latest 24 | strategy: 25 | fail-fast: false 26 | matrix: 27 | include: 28 | - userName: q215613905 29 | repoName: TVBoxOS 30 | branchName: main 31 | - userName: takagen99 32 | repoName: Box 33 | branchName: main 34 | steps: 35 | - name: Checkout 36 | uses: actions/checkout@v3 37 | with: 38 | fetch-depth: 0 39 | - name: Check New Commit 40 | run: | 41 | upStream=https://github.com/${{ matrix.userName }}/${{ matrix.repoName }} 42 | echo "upStream=$upStream" >> $GITHUB_ENV 43 | commit=$(curl -sL $upStream/commits/${{ matrix.branchName }} |grep -o "/${{ matrix.userName }}/${{ matrix.repoName }}/commit/[a-z0-9]\+" |head -1 | cut -d\/ -f5) 44 | if ! grep -q "$commit" README.md || [ "${{ inputs.rebuild }}" == "true" ]; then 45 | echo "commit=$commit" >> $GITHUB_ENV 46 | echo "commitS=${commit:0:7}" >> $GITHUB_ENV 47 | fi 48 | - name: Checkout Source Code and Zip 49 | if: ${{ env.commit }} 50 | run: | 51 | git clone ${{ env.upStream }} TVBoxOSC 52 | cd TVBoxOSC 53 | git checkout ${{ env.commit }} 54 | echo "tag=$(git log --date=format:'%Y%m%d-%H%M' --pretty=format:%cd ${{ env.commitS }} -1)" >> $GITHUB_ENV 55 | zip -q -x ".git/*" -r source-${{ env.commitS }}.zip . 56 | - name: Extra Modify 57 | if: ${{ env.commit }} 58 | working-directory: TVBoxOSC 59 | run: | 60 | echo '修改VersionName' 61 | sed -i "/versionName/s#[0-9a-zA-Z_\.\'\"-]\+\$#\'${{ env.tag }}\'#" app/build.gradle 62 | sed -i "/android:text=/s#=\"#=\"${{ env.tag }}\\\\n\\\\n#" app/src/main/res/layout/dialog_about.xml 63 | echo 'crosswalk源,防挂' 64 | if grep -q 'crosswalk' build.gradle; then 65 | sed -i "/crosswalk/a\ maven { url 'https://o0halflife0o.github.io/crosswalk/releases/crosswalk/android/maven2' }" build.gradle 66 | else 67 | sed -i "/jitpack.io/a\ maven { url 'https://o0halflife0o.github.io/crosswalk/releases/crosswalk/android/maven2' }" build.gradle 68 | fi 69 | - name: Option For Test 70 | if: ${{ inputs.testOption }} 71 | working-directory: TVBoxOSC 72 | run: | 73 | #添加arm64支持,不支持ijk解码 74 | sed -i "/armeabi-v7a[\'\"]$/s#\$#, 'arm64-v8a'#" app/build.gradle 75 | sed -i "/armeabi-v7a[\'\"]$/s#\$#, 'arm64-v8a'#" player/build.gradle 76 | - name: Release Apk Sign 77 | if: ${{ env.commit }} 78 | working-directory: TVBoxOSC 79 | run: | 80 | signingConfigs='ICAgIHNpZ25pbmdDb25maWdzIHtcCiAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICBteUNvbmZpZyB7XAogICAgICAgICAgICAgICAgc3RvcmVGaWxlIGZpbGUoUkVMRUFTRV9TVE9SRV9GSUxFKVwKICAgICAgICAgICAgICAgIHN0b3JlUGFzc3dvcmQgUkVMRUFTRV9TVE9SRV9QQVNTV09SRFwKICAgICAgICAgICAgICAgIGtleUFsaWFzIFJFTEVBU0VfS0VZX0FMSUFTXAogICAgICAgICAgICAgICAga2V5UGFzc3dvcmQgUkVMRUFTRV9LRVlfUEFTU1dPUkRcCiAgICAgICAgICAgICAgICB2MVNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICB2MlNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICBlbmFibGVWM1NpZ25pbmcgPSB0cnVlXAogICAgICAgICAgICAgICAgZW5hYmxlVjRTaWduaW5nID0gdHJ1ZVwKICAgICAgICAgICAgfVwKICAgICAgICB9XAogICAgfVwKXA==' 81 | signingConfig='ICAgICAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICAgICAgc2lnbmluZ0NvbmZpZyBzaWduaW5nQ29uZmlncy5teUNvbmZpZ1wKICAgICAgICAgICAgfVwK' 82 | signingConfigs="$(echo "$signingConfigs" |base64 -d )" 83 | signingConfig="$(echo "$signingConfig" |base64 -d )" 84 | sed -i -e "/defaultConfig {/i\\$signingConfigs " -e "/debug {/a\\$signingConfig " -e "/release {/a\\$signingConfig " app/build.gradle 85 | cp -f ${{ github.workspace }}/.github/workflows/TVBoxOSC.jks app/TVBoxOSC.jks 86 | sed -i '$a\RELEASE_STORE_FILE=./TVBoxOSC.jks' ./gradle.properties 87 | sed -i '$a\RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}' ./gradle.properties 88 | sed -i '$a\RELEASE_STORE_PASSWORD=${{ secrets.PW }}' ./gradle.properties 89 | sed -i '$a\RELEASE_KEY_PASSWORD=${{ secrets.PW }}' ./gradle.properties 90 | - name: Setup Gradle 91 | if: ${{ env.commit }} 92 | uses: gradle/gradle-build-action@v2 93 | - name: Build With Gradle 94 | if: ${{ env.commit }} 95 | working-directory: TVBoxOSC 96 | run: | 97 | chmod +x gradlew 98 | ./gradlew assemblerelease --build-cache --parallel --daemon --warning-mode all 99 | - name: Prepare App 100 | if: ${{ env.commit }} 101 | working-directory: TVBoxOSC 102 | run: | 103 | rm -rf apk/ 104 | mkdir -p apk/ 105 | for file in `find ~ -name "*release*.apk" -print`; do 106 | mv "$file" apk/TVBox_${{ matrix.userName }}_${{ env.tag }}.apk 107 | done 108 | - name: Release Note 109 | if: ${{ env.commit }} 110 | working-directory: TVBoxOSC 111 | run: | 112 | lastCommit=$(grep "${{ matrix.userName }}\/${{ matrix.repoName }}" ${{ github.workspace }}/README.md |grep -o '[a-z0-9]\{40\}') 113 | export LESSCHARSET=utf-8 114 | echo -e "Credit: ${{ matrix.userName }}/${{ matrix.repoName }}\nCommit: ${{ env.commit }}\nChangelog:" > apk/${{ matrix.userName }}-Release.log 115 | if [ "${{ env.commit }}" == "${lastCommit}" ]; then 116 | git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e "s# \{2,\}#\n#g" -e "/^Merge \(pull\|branch\|remote\)/d" -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- >> apk/${{ matrix.userName }}-Release.log 117 | else 118 | git log --pretty=format:%B ${{ env.commitS }}...${lastCommit:0:7} |sed -e "s# \{2,\}#\n#g" -e "/^Merge \(pull\|branch\|remote\)/d" -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- >> apk/${{ matrix.userName }}-Release.log 119 | fi 120 | - name: Upload App To Artifact 121 | uses: actions/upload-artifact@v3 122 | if: ${{ env.commit }} 123 | with: 124 | name: ${{ matrix.userName }}-${{ matrix.repoName }} 125 | path: TVBoxOSC/apk/* 126 | - name: Whether Or Not to Publish 127 | if: ${{ inputs.donotpublish && env.commit }} 128 | run: | 129 | echo "commit=" >> $GITHUB_ENV 130 | - name: Release and Upload Assets 131 | uses: ncipollo/release-action@v1 132 | if: ${{ env.commit }} 133 | with: 134 | name: ${{ env.tag }} 135 | tag: ${{ env.tag }} 136 | bodyFile: TVBoxOSC/apk/${{ matrix.userName }}-Release.log 137 | allowUpdates: true 138 | removeArtifacts: true 139 | artifacts: | 140 | TVBoxOSC/apk/*.apk 141 | TVBoxOSC/source-${{ env.commitS }}.zip 142 | - name: Post To Telegram 143 | if: ${{ env.commit }} 144 | working-directory: TVBoxOSC 145 | run: | 146 | if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then 147 | OUTPUT="${{ github.workspace }}/TVBoxOSC/apk/" 148 | export appRelease=$(find $OUTPUT -name "*${{ matrix.userName }}*.apk") 149 | export sourceCode="${{ github.workspace }}/TVBoxOSC/source-${{ env.commitS }}.zip" 150 | count=$(wc -m apk/${{ matrix.userName }}-Release.log |cut -d ' ' -f1) 151 | echo $count 152 | if [ ${count} -eq 0 ] && [ ${count} -gt 1024 ]; then 153 | echo -e "Credit: ${{ matrix.userName }}/${{ matrix.repoName }}\nCommit: ${{ env.commit }}\nChangelog:\n${{ env.upStream }}/commits/${{ matrix.branchName }}" > apk/${{ matrix.userName }}-Release.log 154 | fi 155 | ESCAPED=`python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$(cat apk/${{ matrix.userName }}-Release.log |sed -e '1s/: \(.*\)\/.*/: #\1/' -e 's#\([&"\/]\)#\\\\\1#g')"` 156 | #检查源码尺寸,太大则不上传 157 | file_size=$(du -s ${sourceCode} | awk '{print $1}') 158 | #文件最大值,1024代表1M 159 | file_limit_size=20480 160 | if [[ ${file_size} -lt ${file_limit_size} ]];then 161 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease" -F sourceCode="@$sourceCode" 162 | else 163 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%2C%20%22caption%22%3A%22${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease" 164 | fi 165 | fi 166 | - name: Push to master 167 | if: ${{ env.commit }} 168 | run: | 169 | rm -rf TVBoxOSC 170 | sed -i '/url =/d' ./.git/config 171 | git config --local user.name "github-actions[bot]" 172 | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" 173 | git remote set-url --add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" 174 | git pull --rebase 175 | sed -i "/${{ matrix.userName }}\/${{ matrix.repoName }}/s#Updated: [a-zA-Z0-9]*#Updated: ${{ env.commit }}#" README.md 176 | git add --all 177 | git commit -m "${{ env.commit }}" 178 | git push -u -f origin master 179 | -------------------------------------------------------------------------------- /.github/workflows/测试.yml: -------------------------------------------------------------------------------- 1 | name: 测试 2 | 3 | on: 4 | # push: 5 | # branches: 6 | # - main 7 | # pull_request: 8 | workflow_dispatch: 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v3 15 | with: 16 | fetch-depth: 0 17 | - name: Clone Project 18 | run: git clone -b main --depth=1 https://github.com/q215613905/TVBoxOS.git 19 | 20 | - name: DIY 21 | run: | 22 | chmod +x diy-J.sh 23 | - https://m-ltv.github.io/TVBoxDIY/diy-J.sh 24 | - name: Build With Gradle 25 | run: | 26 | num=$(find ${{ github.workspace }} -name gradlew | awk -F"/" '{print NF-1}') 27 | DIR=$(find ${{ github.workspace }} -name gradlew | cut -d \/ -f$num) 28 | cd $DIR 29 | chmod +x gradlew 30 | ./gradlew assemblerelease --build-cache --parallel --daemon --warning-mode all 31 | - name: Prepare App 32 | run: | 33 | mkdir -p ${{ github.workspace }}/apk/ 34 | for file in `find ~ -name "*.apk" -print`; do 35 | mv "$file" ${{ github.workspace }}/apk/ 36 | done 37 | - name: Upload App To Artifact 38 | uses: actions/upload-artifact@v3 39 | with: 40 | name: com.github.tvbox.osc 41 | path: ${{ github.workspace }}/apk/* 42 | - name: Post To Telegram 43 | if: ${{ env.commit }} 44 | run: | 45 | if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then 46 | OUTPUT="${{ github.workspace }}/TVBoxOSC/apk/" 47 | export appRelease=$(find $OUTPUT -name "*release*.apk") 48 | export sourceCode="${{ github.workspace }}/TVBoxOSC/${{ env.commitS }}-source.zip" 49 | #lastCommit=`git log --oneline |grep -o '[a-z0-9]\{40\}' |head -1` 50 | lastCommit=$(grep "${{ matrix.userName }}\/${{ matrix.repoName }}" README.md |grep -o '[a-z0-9]\{40\}') 51 | cd TVBoxOSC 52 | export LESSCHARSET=utf-8 53 | if [ "${{ env.commit }}" == "${lastCommit}" ]; then 54 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")" 55 | else 56 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }}...${lastCommit:0:7} |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")" 57 | fi 58 | if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ]; then 59 | ESCAPED="$(echo $COMMIT_MESSAGE |sed 's#%[eE]2[0-9a-zA-Z%]\{6\}##g')" 60 | else 61 | COMMIT_URL=${{ env.upStream }}/commits/${{ matrix.branchName }} 62 | ESCAPED="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$COMMIT_URL")" 63 | fi 64 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Credit%3A%20%23${{ matrix.userName }}%20%0ACommit%3A%20${{ env.commit }}%0AChangelog%3A%0A${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease" -F sourceCode="@$sourceCode" 65 | fi 66 | - name: Push to master 67 | if: ${{ env.commit }} 68 | run: | 69 | rm -rf TVBoxOSC 70 | sed -i "/${{ matrix.userName }}\/${{ matrix.repoName }}/s#Updated: [a-zA-Z0-9]*#Updated: ${{ env.commit }}#" README.md 71 | sed -i '/url =/d' ./.git/config 72 | git config --local user.name "github-actions[bot]" 73 | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" 74 | git remote set-url --add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" 75 | git add --all 76 | git commit -m "${{ env.commit }}" 77 | git push -u -f origin master 78 | -------------------------------------------------------------------------------- /.github/workflows/蜂蜜TV.yml: -------------------------------------------------------------------------------- 1 | name: 蜂蜜TV 2 | 3 | on: 4 | schedule: 5 | - cron: 45 2 * * * 6 | workflow_dispatch: 7 | 8 | 9 | env: 10 | userName: FongMi 11 | repoName: TV 12 | branchName: dev 13 | appName: 蜂蜜TV 14 | 15 | jobs: 16 | prepare: 17 | runs-on: ubuntu-latest 18 | outputs: 19 | commit: ${{ env.commit }} 20 | tag: ${{ env.tag }} 21 | ESCAPED: ${{ env.ESCAPED }} 22 | steps: 23 | - name: Checkout 24 | uses: actions/checkout@v3 25 | with: 26 | fetch-depth: 0 27 | - name: Check New Commit 28 | run: | 29 | upStream=https://github.com/${{ env.userName }}/${{ env.repoName }} 30 | echo "upStream=$upStream" >> $GITHUB_ENV 31 | commit=$(curl -sL $upStream/commits/${{ env.branchName }} |grep -o "/${{ env.userName }}/${{ env.repoName }}/commit/[a-z0-9]\+" |head -1 | cut -d\/ -f5) 32 | if ! git log --oneline |grep -q "$commit"; then 33 | echo "commit=$commit" >> $GITHUB_ENV 34 | echo "commitS=${commit:0:7}" >> $GITHUB_ENV 35 | lastCommit=`git log --oneline |grep -o '[a-z0-9]\{40\}' |head -1` 36 | echo "lastCommit=$lastCommit" >> $GITHUB_ENV 37 | echo "lastCommitS=${lastCommit:0:7}" >> $GITHUB_ENV 38 | fi 39 | - name: Checkout Source Code 40 | if: ${{ env.commit }} 41 | run: | 42 | git clone ${{ env.upStream }} ${{ env.repoName }} 43 | cd ${{ env.repoName }} 44 | git checkout ${{ env.commit }} 45 | #zip 46 | zip -q -x ".git/*" -r ${{ env.commitS }}-source.zip . 47 | #tag 48 | tag="$(git log --date=format:'%Y%m%d-%H%M' --pretty=format:%cd ${{ env.commitS }} -1)" 49 | echo "tag=$tag" >> $GITHUB_ENV 50 | - name: Release Changelog 51 | if: ${{ env.commit }} 52 | working-directory: ${{ env.repoName }} 53 | run: | 54 | export LESSCHARSET=utf-8 55 | if [ "${{ env.commit }}" == "${{ env.lastCommit }}" ]; then 56 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")" 57 | else 58 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }}...${{ env.lastCommit }} |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")" 59 | fi 60 | if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ]; then 61 | ESCAPED=$(echo $COMMIT_MESSAGE |sed 's#%[eE]2[0-9a-zA-Z%]\{6\}##g') 62 | else 63 | COMMIT_URL=${{ env.upStream }}/commits/${{ env.branchName }} 64 | ESCAPED="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$COMMIT_URL")" 65 | fi 66 | echo "ESCAPED=$ESCAPED" >> $GITHUB_ENV 67 | - name: Upload Sourcecode To Artifact 68 | uses: actions/upload-artifact@v3 69 | if: ${{ env.commit }} 70 | with: 71 | name: ${{ env.tag }}-source 72 | path: ${{ env.repoName }}/*-source.zip 73 | 74 | build: 75 | needs: prepare 76 | if: needs.prepare.outputs.tag 77 | strategy: 78 | matrix: 79 | product: [ leanback, mobile ] 80 | fail-fast: false 81 | runs-on: ubuntu-latest 82 | env: 83 | product: ${{ matrix.product }} 84 | tag: ${{ needs.prepare.outputs.tag }} 85 | outputs: 86 | buildResult: ${{ env.buildResult }} 87 | steps: 88 | - uses: actions/checkout@v3 89 | - uses: actions/download-artifact@v2 90 | - name: Unzip Code 91 | run: | 92 | unzip -d source/ *-source/*-source.zip 93 | rm -rf *-source/ 94 | - uses: actions/cache@v3 95 | with: 96 | path: | 97 | ~/.gradle/caches 98 | ~/.gradle/wrapper 99 | key: ${{ runner.os }}-${{ env.userName }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} 100 | restore-keys: | 101 | ${{ runner.os }}-${{ env.userName }}- 102 | - name: Release Apk Sign 103 | working-directory: source/ 104 | run: | 105 | signingConfigs='ICAgIHNpZ25pbmdDb25maWdzIHtcCiAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICBteUNvbmZpZyB7XAogICAgICAgICAgICAgICAgc3RvcmVGaWxlIGZpbGUoUkVMRUFTRV9TVE9SRV9GSUxFKVwKICAgICAgICAgICAgICAgIHN0b3JlUGFzc3dvcmQgUkVMRUFTRV9TVE9SRV9QQVNTV09SRFwKICAgICAgICAgICAgICAgIGtleUFsaWFzIFJFTEVBU0VfS0VZX0FMSUFTXAogICAgICAgICAgICAgICAga2V5UGFzc3dvcmQgUkVMRUFTRV9LRVlfUEFTU1dPUkRcCiAgICAgICAgICAgICAgICB2MVNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICB2MlNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICBlbmFibGVWM1NpZ25pbmcgPSB0cnVlXAogICAgICAgICAgICAgICAgZW5hYmxlVjRTaWduaW5nID0gdHJ1ZVwKICAgICAgICAgICAgfVwKICAgICAgICB9XAogICAgfVwKXA==' 106 | signingConfig='ICAgICAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICAgICAgc2lnbmluZ0NvbmZpZyBzaWduaW5nQ29uZmlncy5teUNvbmZpZ1wKICAgICAgICAgICAgfVwK' 107 | signingConfigs="$(echo "$signingConfigs" |base64 -d )" 108 | signingConfig="$(echo "$signingConfig" |base64 -d )" 109 | sed -i -e "/defaultConfig {/i\\$signingConfigs " -e "/defaultConfig {/i\\$lintOptions " -e "/debug {/a\\$signingConfig " -e "/release {/a\\$signingConfig " app/build.gradle 110 | if ! grep -q 'lintOptions' app/build.gradle; then 111 | lintOptions='ICAgIGxpbnRPcHRpb25zIHtcCiAgICAgICAgY2hlY2tSZWxlYXNlQnVpbGRzIGZhbHNlXAogICAgICAgIGFib3J0T25FcnJvciBmYWxzZVwKICAgIH1cClw=' 112 | lintOptions="$(echo "$lintOptions" |base64 -d )" 113 | sed -i "/defaultConfig {/i\\$lintOptions " app/build.gradle 114 | fi 115 | cp -f ${{ github.workspace }}/.github/workflows/TVBoxOSC.jks app/TVBoxOSC.jks 116 | sed -i '$a\RELEASE_STORE_FILE=./TVBoxOSC.jks' ./gradle.properties 117 | sed -i '$a\RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}' ./gradle.properties 118 | sed -i '$a\RELEASE_STORE_PASSWORD=${{ secrets.PW }}' ./gradle.properties 119 | sed -i '$a\RELEASE_KEY_PASSWORD=${{ secrets.PW }}' ./gradle.properties 120 | - name: Build With Gradle 121 | continue-on-error: true 122 | working-directory: source/ 123 | run: | 124 | chmod +x gradlew 125 | ./gradlew assemble${{ env.product }}release --build-cache --parallel --daemon --warning-mode all --stacktrace 126 | - name: Prepare App 127 | run: | 128 | mkdir -p apk/ 129 | for file in `find ~ -name "*.apk" -print`; do 130 | mv "$file" apk/${{ env.appName }}_${{ env.product }}_${{ env.tag }}.apk 131 | echo "buildResult=yes" >> $GITHUB_ENV 132 | done 133 | - name: Upload App To Artifact 134 | uses: actions/upload-artifact@v3 135 | with: 136 | name: ${{ env.appName }}_${{ env.product }}_${{ env.tag }} 137 | path: apk/*.apk 138 | 139 | upload: 140 | needs: [ prepare, build ] 141 | if: needs.build.outputs.buildResult == 'yes' 142 | runs-on: ubuntu-latest 143 | env: 144 | commit: ${{ needs.prepare.outputs.commit }} 145 | tag: ${{ needs.prepare.outputs.tag }} 146 | ESCAPED: ${{ needs.prepare.outputs.ESCAPED }} 147 | steps: 148 | - uses: actions/checkout@v2 149 | - uses: actions/download-artifact@v2 150 | with: 151 | path: artifacts/ 152 | - name: Prepare Files 153 | run: | 154 | mkdir apk 155 | find artifacts -name "*.*" -exec cp {} apk \; 156 | rm -rf artifacts/ 157 | - name: Release and Upload Assets 158 | uses: softprops/action-gh-release@v1 159 | with: 160 | name: ${{ env.tag }} 161 | tag_name: ${{ env.tag }} 162 | body: ${{ env.commit }} 163 | files: | 164 | apk/*.apk 165 | apk/*-source.zip 166 | env: 167 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 168 | - name: Post To Telegram 169 | working-directory: apk/ 170 | run: | 171 | if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then 172 | export apk1=$(find ~ -name "*leanback*.apk") 173 | export apk2=$(find ~ -name "*mobile*.apk") 174 | export sourceCode=$(find ~ -name "*-source.zip") 175 | if [ -s "$apk2" ]; then 176 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2Fapk1%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2Fapk2%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Commit%3A%20${{ env.commit }}%0AChangelog%3A%0A${{ env.ESCAPED }}%22%2C%22parse_mode%22%3A%20%22Markdown%22%7D%5D" -F apk1="@$apk1" -F apk2="@$apk2" -F sourceCode="@$sourceCode" 177 | else 178 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2Fapk1%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Commit%3A%20${{ env.commit }}%0AChangelog%3A%0A${{ env.ESCAPED }}%22%2C%22parse_mode%22%3A%20%22Markdown%22%7D%5D" -F apk1="@$apk1" -F sourceCode="@$sourceCode" 179 | fi 180 | fi 181 | - name: Push to master 182 | run: | 183 | rm -rf apk/ 184 | sed -i "/Updated Commit/c\\+ Updated Commit: ${{ env.commit }}" README.md 185 | sed -i '/url =/d' ./.git/config 186 | git config --local user.name "github-actions[bot]" 187 | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" 188 | git remote set-url --add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" 189 | git add --all 190 | git commit -m "${{ env.commit }}" 191 | git push -u -f origin master 192 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🎊🎊TVBOXOSC开源项目APP及相关配置接口等等🎊🎊 2 | ## TVBox-o0HalfLife0o 3 | ![Build](https://shields.io/github/workflow/status/o0HalfLife0o/TVBoxOSC/Test?logo=github&label=Build) 4 | [![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/TVBoxOSC) 5 | [![Download](https://img.shields.io/github/v/release/o0HalfLife0o/TVBoxOSC?color=orange&logoColor=orange&label=Download&logo=DocuSign)](https://github.com/o0HalfLife0o/TVBoxOSC/releases/latest) 6 | [![Total](https://shields.io/github/downloads/o0HalfLife0o/TVBoxOSC/total?logo=Bookmeter&label=Counts&logoColor=yellow&color=yellow)](https://github.com/o0HalfLife0o/TVBoxOSC/releases) 7 | - [o0HalfLife0o/TVBoxOSC](https://github.com/o0HalfLife0o/TVBoxOSC) 8 | - [o0HalfLife0o仓库](https://github.com/o0HalfLife0o?tab=repositories) 9 | ## 10 | ## TVBOX热门&仓库&任务 11 | - [Kvymin](https://github.com/Kvymin?tab=repositories) 12 | - [TVBox官仓](https://github.com/CatVodTVOfficial/) 13 | - [q215613905/TVBoxOS](https://github.com/q215613905/TVBoxOS) 14 | - [suanjin/TVBoxOS](https://github.com/suanjin/box) 15 | - [FongMi/TV ☞BearTV&AlphaTV](https://github.com/FongMi/TV) 16 | - [takagen99/TVBoxOSC](https://github.com/takagen99/TVBoxOSC) 17 | - [clanTV*来自takagen](https://github.com/clanTV/clanTV) 18 | - [kensonmiao/CatVodTVOSC&猫影视学生MYSXS](https://github.com/kensonmiao/CatVodTVOSC) 19 | - [TVmovie](https://github.com/usa20210329/Tvmovie) 20 | 21 | ![Build](https://shields.io/github/workflow/status/M-LTV/tvbox/Test?logo=github&label=Build) 22 | [![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/tvbox_stv) 23 | [![Download](https://img.shields.io/github/v/release/M-LTV/tvbox?color=orange&logoColor=orange&label=Download&logo=DocuSign)](https://github.com/M-LTV/tvbox/releases) 24 | [![Total](https://shields.io/github/downloads/M-LTV/tvbox/total?logo=Bookmeter&label=Counts&logoColor=yellow&color=yellow)](https://github.com/M-LTV/tvbox/releases) 25 | 26 | - [pluto下载](https://github.com/pluto-player/updates) 27 | - [M-LTV/tvbox](https://github.com/M-LTV/tvbox) 28 | ᐶ[Action任务](https://github.com/M-LTV/tvbox/actions) 29 | - [![X浏览器](https://www.xbext.com/icons/apple-touch-icon-57x57.png "X浏览器")](https://www.xbext.com/)[X浏览器https://www.xbext.com/](https://www.xbext.com/) 30 | # 31 | 32 | # TVBoxOSC-2 33 | - [TVBoxOSC-2](https://github.com/lqinyli/TVBoxOS-2) 34 | 35 | + Updated Commit: e30987020db0fd5b86b63cfcaf620362cf7e23b4 36 | 37 | # TVBox-takagen99 38 | - [TVBox-takagen99](https://github.com/lqinyli/TVBox-takagen99) 39 | 40 | + Updated Commit: acfb721071fae147dd038d653b728f87ff5f1ebf 41 | 42 | # AlphaTV 43 | - [TVBox-FongMi](https://github.com/lqinyli/FONGMI-TV) 44 | 45 | + Updated Commit: 04b30d5adfcf2f72c5c64b0745b42d2cd96ae303 46 | 47 | # SJTV 48 | - [M-LTV/TVBox-suanjin](https://github.com/M-LTV/TVBox-suanjin) 49 | 50 | + Updated Commit: a0bda9d618196a3fa9f11ebefb97e557f2fc12ee 51 | 52 | # TVBox-kensonmiao 53 | - [kensonmiao/CatVodTVOSC](https://github.com/kensonmiao/CatVodTVOSC) 54 | 55 | + Updated Commit: 09be7d64f6e85051190c61d59aa3eb744ad699e0 56 | 57 | ## 仓库平台&配置 58 | ### 仓库&储存平台 59 | - [Github](https://github.com/) 60 | - [Gitea](https://gitea.com/) 61 | - [Gitee](https://gitee.com/) 62 | - [Jihulab极狐](https://jihulab.com/) 63 | - [Coding](https://coding.net/) 64 | - [云储](https://yunchu.cxoip.com/) 65 | - [csdn代码仓](https://gitcode.net/) 66 | - [Agit](https://agit.ai) 67 | - [Cloudflare_智能化云服务平台_免费CDN安全防护](https://www.cloudflare.com/zh-cn/) 68 | ### 69 | ### 配置&仓库 70 | - [唐三 gitea/dxa/1](https://gitea.com/dxa/1) 71 | - [晴园仓库](https://github.com/ygyzy?tab=repositories) 72 | - [各类TVbox-晴园收藏](https://ygyzy.github.io/tvbox/) 73 | - [dlgt7/TVbox-interface](https://github.com/dlgt7/TVbox-interface) 74 | - []() 75 | - []() 76 | ### 77 | ### Github RAW加速服务&例子 78 | - https://statically.io/ 79 | - https://www.7ed.net/#/raw-cdn 80 | - https://raw.githubusercontents.com/ 用户/仓库/main(分支)/子目录/txt.txt 81 | - https://ghproxy.com/ 代理 82 | - https://ghproxy.com/https://raw.githubusercontent.com/liu673cn/box/main/dc.json 83 | - https://raw.fastgit.org/ 84 | - https://raw-gh.gcdn.mirr.one/ 85 | - https://cdn.staticaly.com/gh/liu673cn/box/main/dc.json 86 | - https://cdn.jsdelivr.net/gh/liu673cn/box@main/dc.json 87 | - https://purge.jsdelivr.net/gh/liu673cn/box@main/m.json 88 | ## 89 | 90 | ## 短地址平台 91 | - [https://short.io](https://short.io/) 92 | - [http://88d.cn](http://88d.cn/) 93 | - [https://77url.com](https://77url.com/) 94 | - [https://suowo.cn](https://suowo.cn/) 95 | - [https://6du.in](https://6du.in/) 96 | - [https://www.urlc.cn](https://www.urlc.cn/) 97 | - [https://59z.cn](https://59z.cn/) 98 | - [https://suowo.cn](https://suowo.cn/) 99 | - [https://0a.fit/](https://0a.fit) 100 | - [https://www.urlc.cn/](https://www.urlc.cn/) 101 | ## 102 | 103 | # TVBoxOSC 104 | ![Build](https://shields.io/github/workflow/status/o0HalfLife0o/TVBoxOSC/Test?logo=github&label=Build) 105 | [![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/TVBoxOSC) 106 | [![Download](https://img.shields.io/github/v/release/o0HalfLife0o/TVBoxOSC?color=orange&logoColor=orange&label=Download&logo=DocuSign)](https://github.com/o0HalfLife0o/TVBoxOSC/releases/latest) 107 | [![Total](https://shields.io/github/downloads/o0HalfLife0o/TVBoxOSC/total?logo=Bookmeter&label=Counts&logoColor=yellow&color=yellow)](https://github.com/o0HalfLife0o/TVBoxOSC/releases) 108 | ## Credits 109 | This repo relies on the following third-party projects: 110 | - [CatVodTVOfficial/TVBoxOSC](https://github.com/CatVodTVOfficial/TVBoxOSC) 111 | - [clanTV*来自takagen](https://github.com/clanTV/clanTV) 112 | - [q215613905/TVBoxOS](https://github.com/q215613905/TVBoxOS) (Updated: 9b0ff83d611febf37a86080f18fb6c3c0cea930d) 113 | - [takagen99/Box](https://github.com/takagen99/Box) (Updated: 15af696928950c35690e1084a78db5567bbdae7d) 114 | - [lqinyli/TVBoxOSC-2](https://github.com/lqinyli/TVBoxOS-2) (Updated: e30987020db0fd5b86b63cfcaf620362cf7e23b4) 115 | - [kensonmiao/CatVodTVOSC](https://github.com/kensonmiao/CatVodTVOSC) (Updated: 09be7d64f6e85051190c61d59aa3eb744ad699e0) 116 | - [TVBox-FongMi](https://github.com/lqinyli/FONGMI-TV) (Updated: 04b30d5adfcf2f72c5c64b0745b42d2cd96ae303) -------------------------------------------------------------------------------- /tvbox.yml: -------------------------------------------------------------------------------- 1 | name: tvbox 2 | 3 | on: 4 | schedule: 5 | - cron: 20,50 0-14 * * * 6 | push: 7 | branches: 8 | - master 9 | workflow_dispatch: 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@v3 17 | with: 18 | fetch-depth: 0 19 | - name: Check New Commit 20 | run: | 21 | upstreamCode=https://github.com/CatVodTVOfficial/TVBoxOSC 22 | echo "upstreamCode=$upstreamCode" >> $GITHUB_ENV 23 | commit=$(curl -sL $upstreamCode/commits/main |grep -o '/CatVodTVOfficial/TVBoxOSC/commit/[a-z0-9]\+' |head -1 | cut -d\/ -f5) 24 | if ! git log --oneline |grep -q "$commit"; then 25 | echo "commit=$commit" >> $GITHUB_ENV 26 | echo "commitS=${commit:0:7}" >> $GITHUB_ENV 27 | fi 28 | - name: Checkout Source Code and Zip 29 | if: ${{ env.commit }} 30 | run: | 31 | git clone ${{ env.upstreamCode }} TVBoxOSC 32 | cd TVBoxOSC 33 | git checkout ${{ env.commit }} 34 | echo "tag=$(git log --date=format:'%Y%m%d-%H%M' --pretty=format:%cd ${{ env.commitS }} -1)" >> $GITHUB_ENV 35 | zip -q -x ".git/*" -r ${{ env.commitS }}-source.zip . 36 | - name: Release Apk Sign 37 | if: ${{ env.commit }} 38 | working-directory: TVBoxOSC 39 | run: | 40 | signingConfigs='ICAgIHNpZ25pbmdDb25maWdzIHtcCiAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICBteUNvbmZpZyB7XAogICAgICAgICAgICAgICAgc3RvcmVGaWxlIGZpbGUoUkVMRUFTRV9TVE9SRV9GSUxFKVwKICAgICAgICAgICAgICAgIHN0b3JlUGFzc3dvcmQgUkVMRUFTRV9TVE9SRV9QQVNTV09SRFwKICAgICAgICAgICAgICAgIGtleUFsaWFzIFJFTEVBU0VfS0VZX0FMSUFTXAogICAgICAgICAgICAgICAga2V5UGFzc3dvcmQgUkVMRUFTRV9LRVlfUEFTU1dPUkRcCiAgICAgICAgICAgICAgICB2MVNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICB2MlNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICBlbmFibGVWM1NpZ25pbmcgPSB0cnVlXAogICAgICAgICAgICAgICAgZW5hYmxlVjRTaWduaW5nID0gdHJ1ZVwKICAgICAgICAgICAgfVwKICAgICAgICB9XAogICAgfVwKXA==' 41 | signingConfig='ICAgICAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICAgICAgc2lnbmluZ0NvbmZpZyBzaWduaW5nQ29uZmlncy5teUNvbmZpZ1wKICAgICAgICAgICAgfVwK' 42 | signingConfigs="$(echo "$signingConfigs" |base64 -d )" 43 | signingConfig="$(echo "$signingConfig" |base64 -d )" 44 | sed -i -e "/defaultConfig {/i\\$signingConfigs " -e "/debug {/a\\$signingConfig " -e "/release {/a\\$signingConfig " app/build.gradle 45 | cp -f ${{ github.workspace }}/.github/workflows/TVBoxOSC.jks app/TVBoxOSC.jks 46 | sed -i '$a\RELEASE_STORE_FILE=./TVBoxOSC.jks' ./gradle.properties 47 | sed -i '$a\RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}' ./gradle.properties 48 | sed -i '$a\RELEASE_STORE_PASSWORD=${{ secrets.PW }}' ./gradle.properties 49 | sed -i '$a\RELEASE_KEY_PASSWORD=${{ secrets.PW }}' ./gradle.properties 50 | - name: Build With Gradle 51 | if: ${{ env.commit }} 52 | working-directory: TVBoxOSC 53 | run: | 54 | chmod +x gradlew 55 | ./gradlew assemblerelease --build-cache --parallel --daemon --warning-mode all 56 | - name: Prepare App 57 | if: ${{ env.commit }} 58 | working-directory: TVBoxOSC 59 | run: | 60 | rm -rf apk/ 61 | mkdir -p apk/ 62 | for file in `find ~ -name "*release*.apk" -print`; do 63 | mv "$file" apk/TVBox_release_${{ env.tag }}.apk 64 | done 65 | - name: Upload App To Artifact 66 | uses: actions/upload-artifact@v3 67 | if: ${{ env.commit }} 68 | with: 69 | name: com.github.tvbox.osc 70 | path: TVBoxOSC/apk/* 71 | - name: Release and Upload Assets 72 | uses: softprops/action-gh-release@v1 73 | if: ${{ env.commit }} 74 | with: 75 | name: ${{ env.tag }} 76 | tag_name: ${{ env.tag }} 77 | body: ${{ env.commit }} 78 | files: | 79 | TVBoxOSC/apk/* 80 | TVBoxOSC/${{ env.commitS }}-source.zip 81 | env: 82 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 83 | - name: Post To Telegram 84 | if: ${{ env.commit }} 85 | run: | 86 | if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then 87 | OUTPUT="${{ github.workspace }}/TVBoxOSC/apk/" 88 | export appRelease=$(find $OUTPUT -name "*release*.apk") 89 | export sourceCode="${{ github.workspace }}/TVBoxOSC/${{ env.commitS }}-source.zip" 90 | lastCommit=`git log --oneline |grep -o '[a-z0-9]\{40\}' |head -1` 91 | cd TVBoxOSC 92 | export LESSCHARSET=utf-8 93 | if [ "${{ env.commit }}" == "${lastCommit}" ]; then 94 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e '/^Merge pull/d' -e '/^$/d' |sort -u`")" 95 | else 96 | COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }}...${lastCommit:0:7} |sed -e '/^Merge pull/d' -e '/^$/d' |sort -u`")" 97 | fi 98 | if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ]; then 99 | ESCAPED="$COMMIT_MESSAGE" 100 | else 101 | COMMIT_URL=${{ env.upstreamCode }}/commits/main 102 | ESCAPED="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$COMMIT_URL")" 103 | fi 104 | curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Commit%3A%20${{ env.commit }}%0AChangelog%3A%0A${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease" -F sourceCode="@$sourceCode" 105 | fi 106 | - name: Push to master 107 | if: ${{ env.commit }} 108 | run: | 109 | rm -rf TVBoxOSC 110 | sed -i "/Updated Commit/c\\+ Updated Commit: ${{ env.commit }}" README.md 111 | sed -i '/url =/d' ./.git/config 112 | git config --local user.name "github-actions[bot]" 113 | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" 114 | git remote set-url --add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}" 115 | git add --all 116 | git commit -m "${{ env.commit }}" 117 | git push -u -f origin master 118 | -------------------------------------------------------------------------------- /update.json: -------------------------------------------------------------------------------- 1 | { 2 | "appName": "STV", 3 | "versionCode": "1.6", 4 | "versionName": "1.0", 5 | "apkUrl": "https://github.com/M-LTV/tvbox/releases/download/20220810-2356/TKG_takagen_release_20220810-2356.apk", 6 | "changeLog":"1.修复xxx Bug;\n2.更新UI界面.", 7 | "updateTips": "更新提示" 8 | } --------------------------------------------------------------------------------