github-action icon indicating copy to clipboard operation
github-action copied to clipboard

Deploy python function

Open AntonOellerer opened this issue 1 year ago • 7 comments

Hey, I am currently unsucessfully trying to deploy a python serverless function with the github action. My deploy.yml:

jobs:
  deploy:
    name: deploy
    runs-on: ubuntu-20.04
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version-file: '.python-version'
      - uses: actions/setup-node@v3
        with:
          node-version-file: '.nvmrc'
      - run: npm ci
      - name: Deploy
        uses: serverless/[email protected]
        with:
          args: deploy --stage ${{ github.ref_name }} --verbose
        env:
          SERVERLESS_ACCESS_KEY: ${{ secrets.SERVERLESS_ACCESS_KEY }}

I also tried it with the approach suggested in the README.md, using

    - name: Install Plugin and Deploy
      uses: serverless/[email protected]
      with:
        args: -c "serverless plugin install --name <plugin-name> && serverless deploy"
        entrypoint: /bin/sh

but it did not work either. (If I am understanding the workflow correctly, npm ci should install the plugin, and the error message is coming from the plugin, so I think it should work either way)

The error I am getting is:

Running "serverless" from node_modules

Deploying <service> to stage staging (eu-central-1, "<provider>" provider)

Generated requirements from /github/workspace/requirements.txt in /github/workspace/.serverless/requirements.txt
Installing requirements from "/github/home/.cache/serverless-python-requirements/f8090527365eda7859729a5727d2f20270cee426c486e19c25ce91c8df2a8a66_x86_64_slspyc/requirements.txt"
Using download cache directory /github/home/.cache/serverless-python-requirements/downloadCacheslspyc

× Stack <service>-staging failed to deploy (0s)
Environment: linux, node 16.16.0, framework 3.21.0 (local) 3.21.0v (global), plugin 6.2.2, SDK 4.3.2
Credentials: Serverless Dashboard, "<provider>" provider (https://app.serverless.com/<provider>)
Docs:        docs.serverless.com
Support:     forum.serverless.com
Bugs:        github.com/serverless/serverless/issues

Error:
Error: `python3.9 -m pip help install` Exited with code 1
    at ChildProcess.<anonymous> (/github/workspace/node_modules/child-process-ext/spawn.js:38:8)
    at ChildProcess.emit (node:events:527:28)
    at ChildProcess.emit (node:domain:475:12)
    at maybeClose (node:internal/child_process:1092:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:302:5)

I think the error occurs here, but I can't quite grasp why the plugin should not be able to access python?

Do you know how to fix this?

AntonOellerer avatar Jul 25 '22 15:07 AntonOellerer

If I install serverless with npm and then run npm exec -c 'serverless deploy --stage ${{ github.ref_name }} --verbose' it works

AntonOellerer avatar Jul 25 '22 15:07 AntonOellerer

you need to use serverless/github-action@v3

sergiors avatar Sep 29 '22 23:09 sergiors

you need to use serverless/github-action@v3

this saved me

JoMingyu avatar Oct 27 '22 16:10 JoMingyu

Thank you, anyone know why 3.1 does not work for python deployments?

walterholohan avatar Feb 13 '23 12:02 walterholohan

Thank you, anyone know why 3.1 does not work for python deployments?

The only reason that it could be is the node version, maybe python version

sergiors avatar Feb 13 '23 13:02 sergiors

correct me if i'm wrong, but the 'with: args: ...serverless deploy' command will run inside serverless/github-action's Docker....3.1's Dockerfile is based on nikolaik/python-nodejs:python3.10-nodejs16-slim so when serverless tries to run python3.9 -m pip help install....then there won't be a python3.9, only a python3.10

and you can't use a python3.10 lambda profile as it doesn't exist yet https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html

jnicho02 avatar Mar 15 '23 17:03 jnicho02

Indeed, same happening for Python lambdas with v3.2 of this github action @jnicho02 points in right direction The Docker image, that is used and being built in the github actions uses Python 3.10 already for versions of Github actions above >3


 Step 1/11 : FROM nikolaik/python-nodejs:python3.10-nodejs18-slim
  python3.10-nodejs18-slim: Pulling from nikolaik/python-nodejs

Using serverless/github-action@v3 for Python 3.9 helped

      - name: Install Plugin and Deploy
        uses: serverless/github-action@v3
        with:
          args: -c "serverless plugin install --name serverless-python-requirements && serverless deploy"
          entrypoint: /bin/sh

advissor avatar Jun 07 '23 19:06 advissor