# 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 build-image: name: Build the docker image runs-on: ubuntu-latest 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)