diff --git a/.github/workflows/main_hamalertspotbot.yml b/.github/workflows/main_hamalertspotbot.yml index fb0e727..9fd6f88 100644 --- a/.github/workflows/main_hamalertspotbot.yml +++ b/.github/workflows/main_hamalertspotbot.yml @@ -1,75 +1,75 @@ -# Docs for the Azure Web Apps Deploy action: https://github.com/azure/functions-action -# More GitHub Actions for Azure: https://github.com/Azure/actions -# More info on Python, GitHub Actions, and Azure Functions: https://aka.ms/python-webapps-actions - -name: Build and deploy Python project to Azure Function App - hamalertspotbot - -on: - push: - branches: - - main - workflow_dispatch: - -env: - AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root - PYTHON_VERSION: '3.11' # set this to the python version to use (supports 3.6, 3.7, 3.8) - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Python version - uses: actions/setup-python@v1 - with: - python-version: ${{ env.PYTHON_VERSION }} - - - name: Create and start virtual environment - run: | - python -m venv venv - source venv/bin/activate - - - name: Install dependencies - run: pip install -r requirements.txt - - # Optional: Add step to run tests here - - - name: Zip artifact for deployment - run: zip release.zip ./* -r - - - name: Upload artifact for deployment job - uses: actions/upload-artifact@v3 - with: - name: python-app - path: | - release.zip - !venv/ - - deploy: - runs-on: ubuntu-latest - needs: build - environment: - name: 'Production' - url: ${{ steps.deploy-to-function.outputs.webapp-url }} - - steps: - - name: Download artifact from build job - uses: actions/download-artifact@v3 - with: - name: python-app - - - name: Unzip artifact for deployment - run: unzip release.zip - - - name: 'Deploy to Azure Functions' - uses: Azure/functions-action@v1 - id: deploy-to-function - with: - app-name: 'hamalertspotbot' - slot-name: 'Production' - package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }} - publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_2A375008FC1743E4AE2D6A345036BDC4 }} - scm-do-build-during-deployment: true - enable-oryx-build: true +# Docs for the Azure Web Apps Deploy action: https://github.com/azure/functions-action +# More GitHub Actions for Azure: https://github.com/Azure/actions +# More info on Python, GitHub Actions, and Azure Functions: https://aka.ms/python-webapps-actions + +name: Build and deploy Python project to Azure Function App - hamalertspotbot + +on: + push: + branches: + - main + workflow_dispatch: + +env: + AZURE_FUNCTIONAPP_PACKAGE_PATH: './' # set this to the path to your web app project, defaults to the repository root + PYTHON_VERSION: '3.11' # set this to the python version to use (supports 3.6, 3.7, 3.8) + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Python version + uses: actions/setup-python@v1 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - name: Create and start virtual environment + run: | + python -m venv venv + source venv/bin/activate + + - name: Install dependencies + run: pip install -r requirements.txt + + # Optional: Add step to run tests here + + - name: Zip artifact for deployment + run: zip release.zip ./* -r + + - name: Upload artifact for deployment job + uses: actions/upload-artifact@v3 + with: + name: python-app + path: | + release.zip + !venv/ + + deploy: + runs-on: ubuntu-latest + needs: build + environment: + name: 'Production' + url: ${{ steps.deploy-to-function.outputs.webapp-url }} + + steps: + - name: Download artifact from build job + uses: actions/download-artifact@v3 + with: + name: python-app + + - name: Unzip artifact for deployment + run: unzip release.zip + + - name: 'Deploy to Azure Functions' + uses: Azure/functions-action@v1 + id: deploy-to-function + with: + app-name: 'hamalertspotbot' + slot-name: 'Production' + package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }} + publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_2A375008FC1743E4AE2D6A345036BDC4 }} + scm-do-build-during-deployment: true + enable-oryx-build: true diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index b86928b..0000000 --- a/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -# Use python:3.9-slim as the base image -FROM python:3.9-slim - -# Set the working directory to /app -WORKDIR /app - -# Copy requirements.txt to the working directory -COPY requirements.txt . - -# Install the dependencies using pip -RUN pip install -r requirements.txt - -# Copy the rest of the application code to the working directory -COPY . . - -# Set the command to run the Flask app -CMD ["python", "spotbot.py"] diff --git a/README.md b/README.md index 0ae457c..9cfca5e 100644 --- a/README.md +++ b/README.md @@ -42,18 +42,15 @@ curl -X POST http://localhost:5000/forward -H "Content-Type: application/json" - Replace `{"key": "value"}` with the actual JSON content you want to send. -## Running the Webserver using Docker +## Deploying and Running the App as an Azure Function App -To run the webserver using Docker, follow these steps: +To deploy and run the app as an Azure Function App, follow these steps: -1. Build the Docker image: - ```sh - docker build -t spotbot . - ``` +1. Create an Azure Function App in the Azure portal. -2. Run the Docker container: - ```sh - docker run -p 5000:5000 -e TARGET_URL= -e DESTINATION_URL= spotbot - ``` +2. Set up the required environment variables in the Azure Function App configuration: + - `TARGET_URL`: The target URL to which the content will be forwarded. -Replace `` with the actual target URL and `` with the desired port number for the Flask app. If `DESTINATION_URL` is not set, the default port will be 5000. +3. Deploy the app to the Azure Function App using the provided GitHub Actions workflow. + +4. Once deployed, you can send POST requests to the Azure Function App endpoint to forward the content to the target URL. diff --git a/spotbot.py b/spotbot.py index aead2eb..066bfa0 100644 --- a/spotbot.py +++ b/spotbot.py @@ -1,17 +1,11 @@ -from flask import Flask, request +import azure.functions as func import requests import os -app = Flask(__name__) - -@app.route('/forward', methods=['POST']) -def forward(): - content = request.get_json() - target_url = os.getenv('TARGET_URL') # Replace with the actual target URL +def main(req: func.HttpRequest) -> func.HttpResponse: + content = req.get_json() + target_url = os.getenv('TARGET_URL') if not target_url: - return "Error: TARGET_URL environment variable is not set.", 500 + return func.HttpResponse("Error: TARGET_URL environment variable is not set.", status_code=500) response = requests.post(target_url, json=content) - return response.text, response.status_code - -if __name__ == '__main__': - app.run(port=os.getenv('DESTINATION_URL', 5000)) + return func.HttpResponse(response.text, status_code=response.status_code)