name: test and deploy on: [push] jobs: build: strategy: fail-fast: false matrix: python-version: ['3.10'] poetry-version: [1.3.1] 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@v4 with: python-version: ${{ matrix.python-version }} # PYTHON dependency management - name: Install Poetry ${{ matrix.poetry-version }} uses: abatilo/actions-poetry@v2.1.6 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@v4 with: python-version: '3.10' # PYTHON for dependency export only, not installing - name: Install Poetry 1.3.1 uses: abatilo/actions-poetry@v2.1.6 with: poetry-version: 1.3.1 # 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: Write CNAME run: echo docs.mixonomer.sarsoo.xyz > ./public/CNAME - 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@v4 with: python-version: '3.9' # PYTHON for dependency export only, not installing - name: Install Poetry 1.3.1 uses: abatilo/actions-poetry@v2.1.6 with: poetry-version: 1.3.1 # 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 domain routes - name: Deploy dispatch.yaml run: gcloud app deploy dispatch.yaml --quiet # 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