name: Deploying

on:
  push:
    branches:
      - master

jobs:
  build_pwa:
    name: Build PWA
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v3
                  
    - uses: pnpm/action-setup@v2
      with:
        version: 8
        
    - name: Install Node.js
      uses: actions/setup-node@v3
      with:
        node-version: 18
        cache: 'pnpm'
    
    - name: Install pnpm packages
      run: pnpm install
    
    - name: Build project
      run: pnpm run build:pwa

    - name: Upload production-ready build files
      uses: actions/upload-artifact@v3
      with:
        name: pwa
        path: ./dist

  build:
    name: Build
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v3
                  
    - uses: pnpm/action-setup@v2
      with:
        version: 8
    
    - name: Install Node.js
      uses: actions/setup-node@v3
      with:
        node-version: 18
        cache: 'pnpm'

    - name: Install pnpm packages
      run: pnpm install
    
    - name: Build project
      run: pnpm run build

    - name: Upload production-ready build files
      uses: actions/upload-artifact@v3
      with:
        name: normal
        path: ./dist

  release:
    name: Release
    needs: [build, build_pwa]
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v3

    - name: Download PWA artifact
      uses: actions/download-artifact@v3
      with:
        name: pwa
        path: ./dist_pwa

    - name: Zip PWA files
      run: cd dist_pwa && zip -r ../movie-web.pwa.zip .

    - name: Download normal artifact
      uses: actions/download-artifact@v3
      with:
        name: normal
        path: ./dist_normal

    - name: Zip normal files
      run: cd dist_normal && zip -r ../movie-web.zip .

    - name: Get version
      id: package-version
      uses: martinbeentjes/npm-get-version-action@main

    - name: Create Release
      id: create_release
      uses: actions/create-release@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        tag_name: ${{ steps.package-version.outputs.current-version }}
        release_name: Movie web v${{ steps.package-version.outputs.current-version }}
        draft: false
        prerelease: false

    - name: Upload release (PWA)
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ steps.create_release.outputs.upload_url }}
        asset_path: ./movie-web.pwa.zip
        asset_name: movie-web.pwa.zip
        asset_content_type: application/zip

    - name: Upload Release (Normal)
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ steps.create_release.outputs.upload_url }}
        asset_path: ./movie-web.zip
        asset_name: movie-web.zip
        asset_content_type: application/zip
