# Copyright (C) 2022 Sebastian Thomschke and contributors # SPDX-License-Identifier: AGPL-3.0-or-later # # https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions name: Build on: push: branches: - '**' tags-ignore: - '**' paths-ignore: - '**/*.md' - '.github/*.yml' pull_request: workflow_dispatch: # https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/ defaults: run: shell: bash jobs: ########################################################### build: ########################################################### strategy: fail-fast: false matrix: os: - macos-latest - ubuntu-latest - windows-latest runs-on: ${{ matrix.os }} steps: - name: Git Checkout uses: actions/checkout@v2 #https://github.com/actions/checkout - uses: actions/setup-python@v2 with: python-version: "3.10" - name: Install python dependencies run: | set -eux python --version # don't upgrade PIP for now: https://github.com/pdm-project/pdm/issues/874 # python -m pip install --upgrade pip pip install pdm # https://github.com/pdm-project/pdm/issues/728#issuecomment-1021771200 pip install -t __pypackages__/3.10/lib selenium pdm install -v - name: run security scan run: | pdm run scan - name: check code style run: | pdm run lint pdm run autopep8 -v --exit-code --recursive --diff kleinanzeigen_bot tests - name: run unit tests run: | pdm run test - name: run kleinanzeigen_bot run: | echo " login: username: 'john.doe@example.com' password: 'such_a_secret' " > config.yaml set -eux pdm run app help pdm run app version pdm run app verify - name: "Install: binutils (strip)" if: startsWith(matrix.os, 'ubuntu') run: sudo apt-get --no-install-recommends install -y binutils - name: "Install: UPX" run: | set -eu case "${{ matrix.target }}" in macos-*) brew install upx ;; ubuntu-*) mkdir /opt/upx upx_download_url=$(curl -fsSL https://api.github.com/repos/upx/upx/releases/latest | grep browser_download_url | grep amd64_linux.tar.xz | cut "-d\"" -f4) echo "Downloading [$upx_download_url]..." curl -fL $upx_download_url | tar Jxv -C /opt/upx --strip-components=1 echo "/opt/upx" >> $GITHUB_PATH ;; windows-*) upx_download_url=$(curl -fsSL https://api.github.com/repos/upx/upx/releases/latest | grep browser_download_url | grep win64.zip | cut "-d\"" -f4) echo "Downloading [$upx_download_url]..." curl -fL -o /tmp/upx.zip $upx_download_url echo "Extracting upx.zip..." mkdir /tmp/upx 7z e /tmp/upx.zip -o/tmp/upx *.exe -r echo "$(cygpath -wa /tmp/upx)" >> $GITHUB_PATH ;; esac - name: build self-contained executable run: | set -eux pdm run compile ls -l dist - name: run self-contained executable run: | set -eux dist/kleinanzeigen-bot help dist/kleinanzeigen-bot version dist/kleinanzeigen-bot verify - name: "Share: self-contained executable" uses: actions/upload-artifact@v2 with: name: artifacts-${{ matrix.os }} path: dist/kleinanzeigen-bot* - name: "Build docker image" if: startsWith(matrix.os, 'ubuntu') run: | set -eux bash docker/build-image.sh docker run --rm second-hand-friends/kleinanzeigen-bot help - name: "Publish docker image" if: startsWith(matrix.os, 'ubuntu') && github.ref == 'refs/heads/main' run: | set -eux echo "${{ github.token }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin image_name="second-hand-friends/kleinanzeigen-bot" docker image tag $image_name ghcr.io/$image_name docker push ghcr.io/$image_name ########################################################### publish-release: ########################################################### runs-on: ubuntu-latest needs: - build if: github.ref == 'refs/heads/main' concurrency: publish-latest-release # https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idconcurrency steps: - name: "SCM Checkout" # only required by "hub release create" to prevent "fatal: Not a git repository" uses: actions/checkout@v2 #https://github.com/actions/checkout - name: "Get: all build artifacts" uses: actions/download-artifact@v2 - name: "Delete previous 'latest' release" run: | set -eu api_base_url="$GITHUB_API_URL/repos/$GITHUB_REPOSITORY" # delete 'latest' github release release_id=$(curl -fsL -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/$GITHUB_REPOSITORY/releases | jq -r '.[] | select(.name == "latest") | .id') if [[ -n $release_id ]]; then echo "Deleting release [$api_base_url/releases/$release_id]..." curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" -fsSL -X DELETE "$api_base_url/releases/$release_id" fi # delete 'latest' git tag tag_url="$api_base_url/git/refs/tags/latest" if curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" -fsLo /dev/null --head "$tag_url"; then echo "Deleting tag [$tag_url]..." curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" -fsSL -X DELETE "$tag_url" fi - name: "Create 'latest' Release" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -eux mv artifacts-macos-latest/kleinanzeigen-bot kleinanzeigen-bot-darwin-amd64 mv artifacts-ubuntu-latest/kleinanzeigen-bot kleinanzeigen-bot-linux-amd64 mv artifacts-windows-latest/kleinanzeigen-bot.exe kleinanzeigen-bot-windows-amd64.exe # https://hub.github.com/hub-release.1.html hub release create "latest" \ --prerelease \ --message "latest" \ --attach "kleinanzeigen-bot-darwin-amd64" \ --attach "kleinanzeigen-bot-linux-amd64" \ --attach "kleinanzeigen-bot-windows-amd64.exe" - name: "Delete intermediate build artifacts" uses: geekyeggo/delete-artifact@1-glob-support # https://github.com/GeekyEggo/delete-artifact/ with: name: "*" useGlob: true failOnError: false