name: Nmap
on:
  workflow_dispatch
jobs:

    build-x86:
      name: Build Nmap x86
      runs-on: ubuntu-latest
      container: muslcc/x86_64:i686-linux-musl
      outputs:
        version: ${{ steps.package_nmap.outputs.PACKAGED_VERSION }}
      steps:
        - name: Checkout
          uses: actions/checkout@v2

        - name: Install dependencies
          run: sudo apk update && sudo apk add bash && sudo bash build/install_deps_alpine.sh

        - name: Build Nmap
          run: $GITHUB_WORKSPACE/build/targets/build_nmap.sh x86

        - name: Package Nmap
          id: package_nmap
          run: $GITHUB_WORKSPACE/package/targets/nmap/package.sh /output x86

        - name: Upload tarball
          uses: actions/upload-artifact@v2
          with:
              name: ${{ steps.package_nmap.outputs.PACKAGED_TARBALL }}
              path: ${{ steps.package_nmap.outputs.PACKAGED_TARBALL_PATH }}

        - name: Upload zip
          uses: actions/upload-artifact@v2
          with:
              name: ${{ steps.package_nmap.outputs.PACKAGED_ZIP }}
              path: ${{ steps.package_nmap.outputs.PACKAGED_ZIP_PATH }}

    build-x86_64:
      name: Build Nmap x86_64
      runs-on: ubuntu-latest
      container: muslcc/x86_64:x86_64-linux-musl
      steps:
        - name: Checkout
          uses: actions/checkout@v2

        - name: Install dependencies
          run: sudo apk update && sudo apk add bash && sudo bash build/install_deps_alpine.sh

        - name: Build Nmap
          run: $GITHUB_WORKSPACE/build/targets/build_nmap.sh x86_64

        - name: Package Nmap
          id: package_nmap
          run: $GITHUB_WORKSPACE/package/targets/nmap/package.sh /output x86_64

        - name: Upload tarball
          uses: actions/upload-artifact@v2
          with:
              name: ${{ steps.package_nmap.outputs.PACKAGED_TARBALL }}
              path: ${{ steps.package_nmap.outputs.PACKAGED_TARBALL_PATH }}

        - name: Upload zip
          uses: actions/upload-artifact@v2
          with:
              name: ${{ steps.package_nmap.outputs.PACKAGED_ZIP }}
              path: ${{ steps.package_nmap.outputs.PACKAGED_ZIP_PATH }}

    build-armhf:
      name: Build Nmap ARMHF
      runs-on: ubuntu-latest
      container: muslcc/x86_64:arm-linux-musleabihf
      steps:
        - name: Checkout
          uses: actions/checkout@v2

        - name: Install dependencies
          run: sudo apk update && sudo apk add bash && sudo bash build/install_deps_alpine.sh

        - name: Build Nmap
          run: $GITHUB_WORKSPACE/build/targets/build_nmap.sh armhf

        - name: Package Nmap
          id: package_nmap
          run: $GITHUB_WORKSPACE/package/targets/nmap/package.sh /output armhf

        - name: Upload tarball
          uses: actions/upload-artifact@v2
          with:
              name: ${{ steps.package_nmap.outputs.PACKAGED_TARBALL }}
              path: ${{ steps.package_nmap.outputs.PACKAGED_TARBALL_PATH }}

        - name: Upload zip
          uses: actions/upload-artifact@v2
          with:
              name: ${{ steps.package_nmap.outputs.PACKAGED_ZIP }}
              path: ${{ steps.package_nmap.outputs.PACKAGED_ZIP_PATH }}

    build-aarch64:
      name: Build Nmap AARCH64
      runs-on: ubuntu-latest
      container: muslcc/x86_64:aarch64-linux-musl
      steps:
        - name: Checkout
          uses: actions/checkout@v2

        - name: Install dependencies
          run: sudo apk update && sudo apk add bash && sudo bash build/install_deps_alpine.sh

        - name: Build Nmap
          run: $GITHUB_WORKSPACE/build/targets/build_nmap.sh aarch64

        - name: Package Nmap
          id: package_nmap
          run: $GITHUB_WORKSPACE/package/targets/nmap/package.sh /output aarch64

        - name: Upload tarball
          uses: actions/upload-artifact@v2
          with:
              name: ${{ steps.package_nmap.outputs.PACKAGED_TARBALL }}
              path: ${{ steps.package_nmap.outputs.PACKAGED_TARBALL_PATH }}

        - name: Upload zip
          uses: actions/upload-artifact@v2
          with:
              name: ${{ steps.package_nmap.outputs.PACKAGED_ZIP }}
              path: ${{ steps.package_nmap.outputs.PACKAGED_ZIP_PATH }}

    create-release:
      name: Create Nmap Release
      runs-on: ubuntu-latest
      needs: [build-x86, build-x86_64, build-armhf, build-aarch64]
      steps:
        - name: Checkout
          uses: actions/checkout@v2

        - name: Prepare Environment
          run: mkdir /tmp/releases

        - name: Download Artifacts
          uses: actions/download-artifact@v2
          with:
            path: /tmp/releases

        - name: List Artifacts
          run: ls -laR /tmp/releases

        - name: Tag Release
          id: tag_release
          run: |
            set +e
            git fetch --quiet --prune --unshallow --tags
            if [[ $(git tag -l | grep nmap-v${{ needs.build-x86.outputs.version }} | wc -l) -gt 0 ]]; then
              echo "Tag for nmap-v${{ needs.build-x86.outputs.version }} already exists. Skipping release creation."
              echo ::set-output name=NEW_RELEASE::"false"
            else
              echo "Tag for nmap-v${{ needs.build-x86.outputs.version }} missing. Starting release creation."
              git tag "nmap-v${{ needs.build-x86.outputs.version }}"
              git push origin "nmap-v${{ needs.build-x86.outputs.version }}"
              echo ::set-output name=NEW_RELEASE::"true"
            fi

        - name: Create Release
          uses: ncipollo/release-action@v1
          if: ${{ steps.tag_release.outputs.NEW_RELEASE == 'true' }}
          with:
            name: Nmap v${{ needs.build-x86.outputs.version }}
            tag: nmap-v${{ needs.build-x86.outputs.version }}
            artifacts: "/tmp/releases/*/*"
            token: ${{ secrets.GITHUB_TOKEN }}