# This workflow will build the client api files using the swagger codegen url and push the output into its own folder. Then copy both server and client api files into the master. Finally pushing the master package to npm

name: TD Ameritrade API Swagger Workflow CI
on:
  push:
    # Use `swaggerhub` branch to create nodejs client and publish to npm
    branches: [ swaggerhub* ]

jobs:
  codegen:
    name: Swagger Code Gen
    runs-on: ubuntu-latest
    #strategy:
      #matrix:
        #node-version: [14.x]
    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Cache node modules
        uses: actions/cache@v2
        env:
          cache-name: cache-node-modules
        with:
          path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-
            ${{ runner.os }}-build-
            ${{ runner.os }}-
      - name: Convert OpenAPI3.0 to Swagger 2
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      - run: |
          npm ci
          npm run build --if-present
          npm run convertopenapi3toswagger2
      - name: Use Swagger To Generate Node.js Client Code ES5
        run: |
          docker run --rm -v ${PWD}:/local swaggerapi/swagger-codegen-cli generate \
          -i /local/nodejs-server/api/swagger2.yaml \
          -l javascript \
          -c /local/config.json \
          -o /local/nodejs-clientES5 \
          --git-user-id $GITHUB_ACTOR \
          --git-repo-id https://github.com/$GITHUB_REPOSITORY
      - name: Use Swagger To Generate Node.js Client Code ES6
        run: |
          docker run --rm -v ${PWD}:/local swaggerapi/swagger-codegen-cli-v3 generate \
                    -i /local/nodejs-server/api/openapi.yaml \
                    -l javascript \
                    -c /local/config.json \
                    -o /local/nodejs-clientES6 \
                    --git-user-id $GITHUB_ACTOR \
                    --git-repo-id https://github.com/$GITHUB_REPOSITORY
      - name: Remove previous nodejs-client* folders from master branch
        uses: EndBug/add-and-commit@master
        with:
          ref: 'master'
          author_name: Christopher Queen
          author_email: christopher.queen@gmail.com
          message: "Remove previous Swagger Client code auto generated"
          remove: "-r nodejs-client*"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Commit changes to master branch
        uses: EndBug/add-and-commit@master
        with:
          ref: 'master'
          author_name: Christopher Queen
          author_email: christopher.queen@gmail.com
          message: "Swagger Client code auto generated"
          add: "*"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}