Skip to content

Create template.txt and template-txt-to-json.py #44

Create template.txt and template-txt-to-json.py

Create template.txt and template-txt-to-json.py #44

Workflow file for this run

name: ci-unittest
# This workflow runs unittests on multiple Python versions,
# and uploads the coverage report to Codecov.
#
# This workflow is triggered by:
# - a manual trigger
# - a push to the repository with changes in the certain paths
# - a pull request to the master branch
# - a monthly schedule
on:
workflow_dispatch:
push:
paths:
- '.github/workflows/ci-unittest.yml'
- 'bin/**'
- 'shadowsocks_manager/**'
- '!shadowsocks_manager/uwsgi.ini'
pull_request:
branches:
- master
schedule:
- cron: '23 11 1 * *'
jobs:
check-run-history:
runs-on: ubuntu-latest
outputs:
RUN_HISTORY: ${{ steps.check-run.outputs.RUN_HISTORY }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Check run history
id: check-run
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
run_history=$(gh api repos/:owner/:repo/actions/workflows/ci-unittest.yml/runs --jq '.workflow_runs | map(select(.head_sha == "${{ github.sha }}" and .id != '${{ github.run_id }}')) | length')
echo "$run_history run(s) found."
echo "RUN_HISTORY=$run_history" >> $GITHUB_OUTPUT
unittest:
runs-on: ubuntu-latest
needs: check-run-history
if: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'pull_request' || github.event_name == 'schedule' || (github.event_name == 'push' && needs.check-run-history.outputs.RUN_HISTORY == '0') }}
strategy:
fail-fast: false
matrix:
python-version: ['3.7.17', '3.8.18', '3.9.19', '3.10.14', '3.11.9', '3.12.3']
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install system packages
run: |
pip install --upgrade pip
pip install coverage codecov-cli
echo -e '#!/usr/bin/env bash\n' | sudo tee /usr/sbin/sendmail
sudo chmod 755 /usr/sbin/sendmail
docker run -d -p 11211:11211 --name ssm-dev-memcached memcached
docker run -d -p 5672:5672 --name ssm-dev-rabbitmq rabbitmq
# run shadowsocks-libev-v2ray, simulate localhost node
MGR_PORT=6001 SS_PORTS=8381-8479 ENCRYPT=aes-256-cfb
docker run -d -p 127.0.0.1:$MGR_PORT:$MGR_PORT/UDP \
-p 127.0.0.1:$SS_PORTS:$SS_PORTS/UDP -p 127.0.0.1:$SS_PORTS:$SS_PORTS \
--name ssm-dev-ss-libev-localhost alexzhangs/shadowsocks-libev-v2ray \
ss-manager --manager-address 0.0.0.0:$MGR_PORT \
--executable /usr/local/bin/ss-server -m $ENCRYPT -s 0.0.0.0 -u
# get private IP
PRIVATE_IP=$(hostname -i | awk '{print $1}')
# run shadowsocks-libev-v2ray, simulate private IP node
MGR_PORT=6002 SS_PORTS=8381-8479 ENCRYPT=aes-256-cfb
docker run -d -p $PRIVATE_IP:$MGR_PORT:$MGR_PORT/UDP \
-p $PRIVATE_IP:$SS_PORTS:$SS_PORTS/UDP -p $PRIVATE_IP:$SS_PORTS:$SS_PORTS \
--name ssm-dev-ss-libev-private alexzhangs/shadowsocks-libev-v2ray \
ss-manager --manager-address 0.0.0.0:$MGR_PORT \
--executable /usr/local/bin/ss-server -m $ENCRYPT -s 0.0.0.0 -u
# run shadowsocks-libev-v2ray, simulate public IP node
MGR_PORT=6003 SS_PORTS=8480 ENCRYPT=aes-256-cfb
docker run -d -p $PRIVATE_IP:$MGR_PORT:$MGR_PORT/UDP \
-p $PRIVATE_IP:$SS_PORTS:$SS_PORTS/UDP -p $PRIVATE_IP:$SS_PORTS:$SS_PORTS \
--name ssm-dev-ss-libev-public alexzhangs/shadowsocks-libev-v2ray \
ss-manager --manager-address 0.0.0.0:$MGR_PORT \
--executable /usr/local/bin/ss-server -m $ENCRYPT -s 0.0.0.0 -u
- name: Install this project
run: |
pip install -e .
ssm-setup -m
- name: Run Django testcases
run: ssm-test -c
- name: Upload coverage report to Codecov
continue-on-error: true # codecov uploader occasionally fails, e.g.: upstream request timeout
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
run: ssm-test -u