Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. ---
  2. name: CI
  3. permissions:
  4. actions: read
  5. checks: read
  6. contents: read
  7. deployments: read
  8. issues: read
  9. discussions: read
  10. pull-requests: read
  11. repository-projects: read
  12. security-events: read
  13. statuses: read
  14. on:
  15. push:
  16. tags:
  17. - v*
  18. branches:
  19. - master
  20. - stable
  21. - v1
  22. release:
  23. types:
  24. - published
  25. - released
  26. pull_request:
  27. types:
  28. - opened
  29. - edited
  30. - reopened
  31. - synchronize
  32. - ready_for_review
  33. jobs:
  34. test:
  35. name: Test
  36. runs-on: ubuntu-latest
  37. timeout-minutes: 10
  38. steps:
  39. - name: Checkout
  40. uses: actions/checkout@v6
  41. with:
  42. submodules: recursive
  43. - uses: jdx/mise-action@v3
  44. name: Install mise
  45. - name: Cache Go modules and build
  46. uses: actions/cache@v5
  47. with:
  48. path: |
  49. ~/go/pkg/mod
  50. ~/.cache/go-build
  51. key: ${{ runner.os }}-go-${{ hashFiles('go.sum') }}
  52. restore-keys: |
  53. ${{ runner.os }}-go-
  54. - name: Run tests
  55. run: mise tasks run covtest
  56. - name: Collect coverage
  57. uses: codecov/codecov-action@v5
  58. with:
  59. files: ./coverage.txt
  60. fuzz:
  61. name: Fuzzing
  62. runs-on: ubuntu-latest
  63. timeout-minutes: 20
  64. steps:
  65. - name: Checkout
  66. uses: actions/checkout@v6
  67. with:
  68. submodules: recursive
  69. - uses: jdx/mise-action@v3
  70. name: Install mise
  71. - name: Cache Go modules and build
  72. uses: actions/cache@v5
  73. with:
  74. path: |
  75. ~/go/pkg/mod
  76. ~/.cache/go-build
  77. key: ${{ runner.os }}-go-${{ hashFiles('go.sum') }}
  78. restore-keys: |
  79. ${{ runner.os }}-go-
  80. - name: Run fuzzing
  81. run: mise tasks run 'test:fuzz:*'
  82. lint:
  83. name: Lint
  84. runs-on: ubuntu-latest
  85. timeout-minutes: 5
  86. steps:
  87. - name: Checkout
  88. uses: actions/checkout@v6
  89. with:
  90. submodules: recursive
  91. - uses: jdx/mise-action@v3
  92. name: Install mise
  93. - name: Cache Go modules and build
  94. uses: actions/cache@v5
  95. with:
  96. path: |
  97. ~/go/pkg/mod
  98. ~/.cache/go-build
  99. key: ${{ runner.os }}-go-${{ hashFiles('go.sum') }}
  100. restore-keys: |
  101. ${{ runner.os }}-go-
  102. - name: Run linter
  103. run: mise tasks run lint
  104. artifacts:
  105. name: Build release artifacts
  106. runs-on: ubuntu-latest
  107. timeout-minutes: 20
  108. steps:
  109. - name: Checkout
  110. uses: actions/checkout@v6
  111. with:
  112. submodules: recursive
  113. - uses: jdx/mise-action@v3
  114. name: Install mise
  115. - name: Cache Go modules
  116. uses: actions/cache@v5
  117. with:
  118. path: ~/go/pkg/mod
  119. key: ${{ runner.os }}-gomod-${{ hashFiles('go.sum') }}
  120. restore-keys: |
  121. ${{ runner.os }}-gomod-
  122. - name: Cache cross-compilation build
  123. uses: actions/cache@v5
  124. with:
  125. path: ~/.cache/go-build
  126. key: ${{ runner.os }}-goreleaser-${{ hashFiles('go.sum') }}-${{ hashFiles('**/*.go') }}
  127. restore-keys: |
  128. ${{ runner.os }}-goreleaser-${{ hashFiles('go.sum') }}-
  129. ${{ runner.os }}-goreleaser-
  130. - name: Run release
  131. run: mise tasks run release
  132. docker:
  133. name: Docker
  134. runs-on: ubuntu-latest
  135. timeout-minutes: 20
  136. permissions:
  137. contents: read
  138. packages: write
  139. steps:
  140. - name: Checkout
  141. uses: actions/checkout@v6
  142. with:
  143. submodules: recursive
  144. - name: Get Docker meta
  145. id: meta
  146. uses: docker/metadata-action@v5
  147. with:
  148. images: |
  149. nineseconds/mtg
  150. ghcr.io/${{ github.repository }}
  151. tags: |
  152. type=semver,pattern={{version}}
  153. type=semver,pattern={{major}}.{{minor}}
  154. type=semver,pattern={{major}}
  155. type=raw,value=latest,enable={{is_default_branch}}
  156. type=raw,value=master,enable=${{ github.ref == 'refs/heads/master' }}
  157. type=raw,value=stable,enable=${{ github.ref == 'refs/heads/stable' }}
  158. - name: Setup QEMU
  159. uses: docker/setup-qemu-action@v3
  160. - name: Setup BuildX
  161. uses: docker/setup-buildx-action@v3
  162. - name: Login to DockerHub
  163. if: github.event_name != 'pull_request'
  164. uses: docker/login-action@v3
  165. with:
  166. username: ${{ secrets.DOCKERHUB_USERNAME }}
  167. password: ${{ secrets.DOCKERHUB_PASSWORD }}
  168. - name: Login to GitHub Container Registry
  169. if: github.event_name != 'pull_request'
  170. uses: docker/login-action@v3
  171. with:
  172. registry: ghcr.io
  173. username: ${{ github.actor }}
  174. password: ${{ secrets.GITHUB_TOKEN }}
  175. - name: Build and push
  176. uses: docker/build-push-action@v6
  177. with:
  178. pull: true
  179. context: .
  180. platforms: linux/amd64,linux/arm64,linux/386,linux/arm/v7,linux/arm/v6
  181. push: ${{ github.event_name != 'pull_request' }}
  182. tags: ${{ steps.meta.outputs.tags }}
  183. labels: ${{ steps.meta.outputs.labels }}
  184. cache-from: type=gha
  185. cache-to: type=gha,mode=max