diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml index 1795589..8557820 100755 --- a/.github/workflows/backend.yml +++ b/.github/workflows/backend.yml @@ -1,10 +1,13 @@ -name: Django CI/CD +name: Django CI on: [push, pull_request] jobs: - checking: - runs-on: ubuntu-latest + migrations: + runs-on: self-hosted + + env: + DJANGO_DEBUG: False steps: - uses: actions/checkout@v3 @@ -12,15 +15,15 @@ jobs: uses: actions/setup-python@v4 with: python-version: '3.x' - - name: Copy env file - run: cp backend/template.env backend/.env - name: Install production dependencies run: pip install -r backend/requirements/prod.txt - name: Check for pending migrations run: cd backend/project && python manage.py makemigrations --check --dry-run linting: - runs-on: ubuntu-latest + runs-on: self-hosted + needs: migrations + steps: - uses: actions/checkout@v3 - name: Set up Python @@ -33,20 +36,36 @@ jobs: run: cd backend && ruff check . testing: - runs-on: ubuntu-latest + runs-on: self-hosted + needs: linting + + env: + DJANGO_DEBUG: False + steps: - uses: actions/checkout@v3 - name: Set up Python 3.x uses: actions/setup-python@v4 with: python-version: '3.x' - - name: Copy env file - run: cp backend/template.env backend/.env - - name: Install prod dependencies - run: pip install -r backend/requirements/prod.txt - - name: Test production environment - run: cd backend/project && DJANGO_DEBUG=False python manage.py test - - name: Install dev dependencies - run: pip install -r backend/requirements/dev.txt - - name: Test development environment - run: cd backend/project && DJANGO_DEBUG=True python manage.py test + - name: Install test dependencies + run: pip install -r backend/requirements/test.txt + - name: + run: cd backend/project && python manage.py test + + build_and_push: + runs-on: self-hosted + needs: testing + + steps: + - uses: actions/checkout@v3 + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + registry: docker.io + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_ACCESS_TOKEN }} + - name: Build Docker image + run: docker build -t skillhub/backend backend/ + - name: Push Docker image + run: docker push skillhub/backend diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..4ffa0b2 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,23 @@ +name: Deployment + +on: + workflow_run: + workflows: ["Django CI/CD", "Frontend CI/CD"] + types: + - completed + +jobs: + deploy: + runs-on: self-hosted + if: github.event.workflow_run.conclusion == 'success' + + steps: + - uses: actions/checkout@v3 + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + registry: docker.io + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_ACCESS_TOKEN }} + - name: Pull Docker images and start containers + run: docker-compose up -d diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml new file mode 100644 index 0000000..fc3c410 --- /dev/null +++ b/.github/workflows/frontend.yml @@ -0,0 +1,44 @@ +name: Frontend CI/CD + +on: [push, pull_request] + +jobs: + linting: + runs-on: self-hosted + + steps: + - uses: actions/checkout@v3 + - name: Install Node.js + uses: actions/setup-node@v2 + with: + node-version: '18' + - name: Install dependencies + run: npm install + - name: Linting + run: npm run lint + + build_and_push: + runs-on: self-hosted + needs: linting + + steps: + - name: Checkout code + uses: actions/checkout@v3 + - name: Install Node.js + uses: actions/setup-node@v2 + with: + node-version: '18' + - name: Install dependencies + run: npm install + - name: Build + run: npm run build + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + registry: docker.io + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_ACCESS_TOKEN }} + - name: Build and push Docker image + run: | + docker build -t skillhub/frontend frontend/ + docker push skillhub/frontend