From 3e6418b4e8c7198cb126ee00fe0ebd94a75fd9cc Mon Sep 17 00:00:00 2001 From: Mohammad Sajad Pourajam Date: Fri, 20 Mar 2026 17:04:35 +0330 Subject: [PATCH] CI/CD --- .gitea/workflows/sensor-hub.yml | 120 +++++++++++++++++++++++++++++++ .github/workflows/sensor-hub.yml | 72 +++++++++++++++++++ 2 files changed, 192 insertions(+) create mode 100644 .gitea/workflows/sensor-hub.yml create mode 100644 .github/workflows/sensor-hub.yml diff --git a/.gitea/workflows/sensor-hub.yml b/.gitea/workflows/sensor-hub.yml new file mode 100644 index 0000000..e44049d --- /dev/null +++ b/.gitea/workflows/sensor-hub.yml @@ -0,0 +1,120 @@ +name: Sensor Hub Service CI/CD + +on: + push: + branches: [production] + paths: + - '**' + - '.gitea/workflows/sensor-hub.yml' + + pull_request: + branches: [production] + paths: + - '**' + - '.gitea/workflows/sensor-hub.yml' + +jobs: + test: + name: Lint & Test + runs-on: self-hosted + container: + image: mirror2.chabokan.net/ubuntu:22.04 + options: --add-host gitea:172.17.0.1 + + steps: + + + - name: Setup Ubuntu apt mirrors + run: | + tee /etc/apt/sources.list > /dev/null <<'EOF' + deb https://mirror-linux.runflare.com/ubuntu/ noble main restricted universe multiverse + deb https://mirror-linux.runflare.com/ubuntu/ noble-updates main restricted universe multiverse + deb https://mirror-linux.runflare.com/ubuntu/ noble-backports main restricted universe multiverse + deb https://mirror-linux.runflare.com/ubuntu/ noble-security main restricted universe multiverse + + deb [trusted=yes] https://mirror2.chabokan.net/ubuntu focal main universe + deb [trusted=yes] https://mirror2.chabokan.net/ubuntu focal-updates main universe + deb [trusted=yes] https://mirror2.chabokan.net/ubuntu focal-security main universe + + + + + deb http://mirror.iranserver.com/ubuntu/ jammy main restricted + deb-src http://mirror.iranserver.com/ubuntu/ jammy main restricted + + + deb http://mirror.iranserver.com/ubuntu/ jammy-updates main restricted + deb-src http://mirror.iranserver.com/ubuntu/ jammy-updates main restricted + + + deb http://mirror.iranserver.com/ubuntu/ jammy universe + deb-src http://mirror.iranserver.com/ubuntu/ jammy universe + deb http://mirror.iranserver.com/ubuntu/ jammy-updates universe + + + + deb http://mirror.iranserver.com/ubuntu/ jammy multiverse + deb-src http://mirror.iranserver.com/ubuntu/ jammy multiverse + deb http://mirror.iranserver.com/ubuntu/ jammy-updates multiverse + deb-src http://mirror.iranserver.com/ubuntu/ jammy-updates multiverse + + + deb http://mirror.iranserver.com/ubuntu/ jammy-backports main restricted universe multiverse + deb-src http://mirror.iranserver.com/ubuntu/ jammy-backports main restricted universe multiverse + + + EOF + apt-get update + - name: Install git + run: | + apt-get install -y git + + - name: Checkout repository + run: | + git clone http://gitea:3000/sajad-dev/Sensor-Hub.git . + + - name: Install Python + run: | + apt-get install -y python3 python3-pip python3-venv git + + - name: Setup Python pip mirrors + run: | + pip3 config --user set global.index-url https://package-mirror.liara.ir/repository/pypi/simple + pip3 config --user set global.extra-index-url https://mirror.cdn.ir/repository/pypi/simple + pip3 config --user set global.trusted-host "package-mirror.liara.ir mirror.cdn.ir mirror2.chabokan.net" + - name: Install system dependencies + run: | + apt-get install -y \ + python3 \ + python3-pip \ + python3-venv \ + pkg-config \ + build-essential \ + default-libmysqlclient-dev + + - name: Install dependencies + run: | + python3 -m pip install --upgrade pip + pip3 install -r requirements.txt + pip3 install pytest flake8 + + - name: Run lint + run: | + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + + + - name: Setup SSH key + run: | + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + ssh-keyscan -p ${{secrets.SERVER_SSH_PORT}} -H ${{ secrets.SERVER_HOST }} >> ~/.ssh/known_hosts + + - name: Deploy + run: | + ssh ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} -p ${{secrets.SERVER_SSH_PORT}}<< 'EOF' + cd application/Sensor-Hub + git pull origin production + docker-compose -f docker-compose-prod.yaml down + docker-compose -f docker-compose-prod.yaml up -d + EOF diff --git a/.github/workflows/sensor-hub.yml b/.github/workflows/sensor-hub.yml new file mode 100644 index 0000000..76f907e --- /dev/null +++ b/.github/workflows/sensor-hub.yml @@ -0,0 +1,72 @@ + name: Sensor Hub Service CI/CD + + on: + push: + branches: [main] + paths: + - 'sensor-hub/**' + - 'sensor-hub/.github/workflows/sensor-hub.yml' + pull_request: + branches: [main] + paths: + - 'sensor-hub/**' + - 'sensor-hub/.github/workflows/sensor-hub.yml' + + defaults: + run: + working-directory: sensor-hub + + jobs: + test: + name: Lint & Test + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + python-version: ['3.11'] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Cache pip dependencies + uses: actions/cache@v4 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-sensor-hub-${{ hashFiles('sensor-hub/requirements.txt') }} + restore-keys: | + ${{ runner.os }}-pip-sensor-hub- + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install pytest flake8 + + - name: Run lint + run: flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + + - name: Run tests + run: pytest --tb=short -q + + deploy: + name: Deploy Sensor Hub Service + needs: test + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + steps: + - name: Deploy via SSH + uses: appleboy/ssh-action@v1 + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USER }} + port: ${{ secrets.SSH_PORT }} + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + cd /opt/myproject/sensor-hub + git pull origin main + sudo systemctl restart sensor-hub