135 lines
4.2 KiB
YAML
135 lines
4.2 KiB
YAML
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
|
|
# docs: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
|
|
|
|
name: 🧪 Tests
|
|
|
|
on:
|
|
workflow_dispatch: {}
|
|
push:
|
|
branches: [master, main]
|
|
paths-ignore: ['**.md']
|
|
tags-ignore: ['**']
|
|
pull_request:
|
|
paths-ignore: ['**.md']
|
|
|
|
concurrency:
|
|
group: ${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
gitleaks:
|
|
name: Check for GitLeaks
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- {uses: actions/checkout@v4, with: {fetch-depth: 0}}
|
|
- uses: gacts/gitleaks@v1
|
|
|
|
filter:
|
|
name: Filter files
|
|
runs-on: ubuntu-latest
|
|
permissions: {pull-requests: read}
|
|
outputs:
|
|
docker: ${{ steps.filter.outputs.docker }}
|
|
helm: ${{ steps.filter.outputs.helm }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dorny/paths-filter@v3
|
|
id: filter
|
|
with:
|
|
filters: |
|
|
docker: [Dockerfile, '*docker*', '*3proxy*']
|
|
helm: ['deployments/helm/**', '*kube*']
|
|
|
|
lint-charts:
|
|
name: Lint the chart
|
|
runs-on: ubuntu-latest
|
|
needs: [filter]
|
|
if: needs.filter.outputs.helm == 'true'
|
|
defaults: {run: {working-directory: ./deployments/helm}}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: azure/setup-helm@v4
|
|
- run: helm dependency update .
|
|
- run: helm template . > /dev/null
|
|
- run: helm lint --strict .
|
|
|
|
build-image:
|
|
name: Build the docker image
|
|
runs-on: ubuntu-latest
|
|
needs: [filter] # since this is the initial step, we can filter out the rest of the jobs right here to skip them
|
|
if: needs.filter.outputs.docker == 'true'
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- run: docker build -f ./Dockerfile --tag 3proxy:local .
|
|
- run: docker save 3proxy:local > ./docker-image.tar
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: docker-image
|
|
path: ./docker-image.tar
|
|
retention-days: 1
|
|
|
|
try-to-use:
|
|
name: Build and use the docker image (auth ${{ matrix.auth }})
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
auth: [yes, no]
|
|
needs: [build-image]
|
|
steps:
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: docker-image
|
|
path: .artifact
|
|
- working-directory: .artifact
|
|
run: docker load < docker-image.tar
|
|
- if: matrix.auth != 'yes'
|
|
run: docker run --rm -d -p "3128:3128/tcp" -p "1080:1080/tcp" 3proxy:local
|
|
- if: matrix.auth == 'yes'
|
|
run: docker run --rm -d -p "3128:3128/tcp" -p "1080:1080/tcp" -e "PROXY_LOGIN=evil" -e "PROXY_PASSWORD=live" -e 'EXTRA_ACCOUNTS={"foo":"bar"}' 3proxy:local
|
|
- run: sleep 3
|
|
- name: Try to use HTTP proxy
|
|
if: matrix.auth != 'yes'
|
|
run: |
|
|
curl -v --fail \
|
|
--proxy http://127.0.0.1:3128 \
|
|
--connect-timeout 3 \
|
|
--max-time 3 \
|
|
https://www.cloudflare.com/robots.txt
|
|
- name: Try to use SOCKS proxy
|
|
if: matrix.auth != 'yes'
|
|
run: |
|
|
curl -v --fail \
|
|
--proxy socks5://127.0.0.1:1080 \
|
|
--connect-timeout 3 \
|
|
--max-time 3 \
|
|
https://www.cloudflare.com/robots.txt
|
|
- name: Try to use HTTP proxy (with auth)
|
|
if: matrix.auth == 'yes'
|
|
run: |
|
|
curl -v --fail \
|
|
--proxy http://127.0.0.1:3128 \
|
|
--proxy-user evil:live \
|
|
--connect-timeout 3 \
|
|
--max-time 3 \
|
|
https://www.cloudflare.com/robots.txt
|
|
- name: Try to use HTTP proxy (with auth, extra user)
|
|
if: matrix.auth == 'yes'
|
|
run: |
|
|
curl -v --fail \
|
|
--proxy http://127.0.0.1:3128 \
|
|
--proxy-user foo:bar \
|
|
--connect-timeout 3 \
|
|
--max-time 3 \
|
|
https://www.cloudflare.com/robots.txt
|
|
- name: Try to use SOCKS proxy (with auth)
|
|
if: matrix.auth == 'yes'
|
|
run: |
|
|
curl -v --fail \
|
|
--proxy socks5://127.0.0.1:1080 \
|
|
--proxy-user evil:live \
|
|
--connect-timeout 3 \
|
|
--max-time 3 \
|
|
https://www.cloudflare.com/robots.txt
|
|
- run: docker stop $(docker ps -a --filter ancestor=3proxy:local -q)
|