name: test and deploy on: [push] jobs: build: strategy: fail-fast: false matrix: python-version: ['3.10'] poetry-version: [1.1.14] node: [18] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 # get source # PYTHON - name: Install Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} # PYTHON dependency management - name: Install Poetry ${{ matrix.poetry-version }} uses: abatilo/actions-poetry@v2.1.0 with: poetry-version: ${{ matrix.poetry-version }} # PYTHON install dependencies - name: Install Python Dependencies run: poetry install # PYTHON for authentication when testing - name: Set up Cloud SDK uses: google-github-actions/auth@v0.7.3 with: credentials_json: '${{ secrets.GCP_SA_KEY }}' export_environment_variables: true create_credentials_file: true # PYTHON run unit tests - name: Run Python Tests run: poetry run python -m unittest discover -s tests # JS setup for testing - name: Install Node ${{ matrix.node }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} # JS install from lock.json - name: Install Node Packages run: npm ci # JS build for checking errors - name: Compile Front-end run: npm run build --if-present # JS tests # - name: Run JavaScript Tests # run: npm test # documentation: # runs-on: ubuntu-latest # needs: build # for ignoring bad builds # if: github.event_name == 'push' && github.ref == 'refs/heads/master' # steps: # - uses: actions/checkout@v3 # get source # # PYTHON # - name: Install Python 3.10 # uses: actions/setup-python@v2 # with: # python-version: '3.10' # # PYTHON for dependency export only, not installing # - name: Install Poetry 1.1.14 # uses: abatilo/actions-poetry@v2.1.0 # with: # poetry-version: 1.1.14 # # PYTHON install dependencies # - name: Install Python Dependencies # run: poetry install # # JS setup for jsdoc # - name: Install Node 18 # uses: actions/setup-node@v2 # with: # node-version: 18 # # JS setup for jsdoc # - name: Install jsdoc # run: npm install jsdoc # # JS setup for jsdoc # - name: Add node_modules/.bin to PATH # run: echo "${GITHUB_WORKSPACE}/node_modules/.bin" >> $GITHUB_PATH # # DEPLOY for setting up cloud API # - name: Set up Cloud SDK # uses: google-github-actions/auth@v0.7.3 # with: # credentials_json: '${{ secrets.GCP_SA_KEY }}' # export_environment_variables: true # create_credentials_file: true # - name: Generate Documentation # run: poetry run sphinx-build docs public -b html # - name: Deploy To Pages # uses: peaceiris/actions-gh-pages@v3 # with: # github_token: ${{ secrets.GITHUB_TOKEN }} # publish_dir: ./public deploy: runs-on: ubuntu-latest needs: build # for ignoring bad builds if: github.event_name == 'push' && github.ref == 'refs/heads/master' steps: - uses: actions/checkout@v3 # get source # PYTHON (pinned to 3.9 for gcloud attribute mapping error) - name: Install Python 3.9 uses: actions/setup-python@v2 with: python-version: '3.9' # PYTHON for dependency export only, not installing - name: Install Poetry 1.1.14 uses: abatilo/actions-poetry@v2.1.0 with: poetry-version: 1.1.14 # PYTHON Export Poetry dependencies as requirements.txt - name: Export Poetry Dependencies run: python admin.py pydepend # JS setup - name: Install Node 18 uses: actions/setup-node@v2 with: node-version: 18 # JS install from lock.json - name: Install Node Packages run: npm ci # JS will be built again, for flagging errors - name: Compile Front-end run: npm run build --if-present # JS for compiling scss - name: Compile Sass uses: gha-utilities/sass-build@v0.3.5 with: source: src/scss/style.scss destination: build/style.css # DEPLOY for setting up cloud API - name: Set up Cloud SDK uses: google-github-actions/auth@v0.7.3 with: credentials_json: '${{ secrets.GCP_SA_KEY }}' export_environment_variables: true create_credentials_file: true # DEPLOY set project - name: Set GCP Project run: python admin.py set_project # DEPLOY app engine service, -nb for skipping compile - name: Deploy App Engine Service run: python admin.py app -nb ### MAIN FUNCTIONS # DEPLOY update_tag function - name: Deploy update_tag Function run: python admin.py tag # DEPLOY run_user_playlist function - name: Deploy run_user_playlist Function run: python admin.py playlist ### CRON FUNCTIONS # DEPLOY run_all_playlists function - name: Deploy run_all_playlists Function run: python admin.py playlist_cron # DEPLOY run_all_playlist_stats function - name: Deploy run_all_playlist_stats Function run: python admin.py playlist_stats_cron # DEPLOY run_all_tags function - name: Deploy run_all_tags Function run: python admin.py tags_cron