diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a6dc6e49..5089e758 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,3 +68,64 @@ jobs: with: name: binaries-${{ matrix.os-name }} path: ../artifact + + # Install & Preparing Release + # Set up environment + # Local Prepare Release action + install-prepare-release: + name: Install/Prepare Release + # cycle through os list + runs-on: ${{ matrix.os-name }} + + # VM settings + # os & python versions + strategy: + matrix: + # install/release on not xenial + os-name: [ ubuntu-latest, macOS-latest, windows-latest ] + python-version: [ 3.7 ] + + needs: [ install-build ] + steps: + # checkout commit + - name: Checkout commit + uses: actions/checkout@v1 + # install python + - name: Install Python + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + architecture: "x64" + - run: | + python --version + # install dependencies via pip + - name: Install Dependencies via pip + env: + OS_NAME: ${{ matrix.os-name }} + run: | + python ./resources/ci/common/install.py + # download binary artifact + - name: Download Binary Artifact + uses: actions/download-artifact@v1 + with: + name: binary-${{ matrix.os-name }} + path: ./ + # Prepare AppVersion & Release + - name: Prepare AppVersion & Release + env: + OS_NAME: ${{ matrix.os-name }} + run: | +# python ./resources/ci/common/prepare_appversion.py + python ./resources/ci/common/prepare_release.py + # upload appversion artifact for later step +# - name: Upload AppVersion Artifact +# uses: actions/upload-artifact@v1 +# with: +# name: appversion-${{ matrix.os-name }} +# path: ./resources/app/meta/manifests/app_version.txt + # upload archive artifact for later step + - name: Upload Archive Artifact + uses: actions/upload-artifact@v1 + with: + name: archive-${{ matrix.os-name }} + path: ../deploy diff --git a/resources/ci/common/git_clean.py b/resources/ci/common/git_clean.py new file mode 100644 index 00000000..9b424283 --- /dev/null +++ b/resources/ci/common/git_clean.py @@ -0,0 +1,14 @@ +import subprocess # do stuff at the shell level + +def git_clean(): + # clean the git slate + subprocess.check_call([ + "git", # run a git command + "clean", # clean command + "-dfx", # d: directories, f: files, x: ignored files + "--exclude=.vscode", # keep vscode IDE files + "--exclude=.idea", # keep idea IDE files + "--exclude=*.json"]) # keep JSON files for that one time I just nuked all that I was working on, oops + +if __name__ == "__main__": + git_clean() diff --git a/resources/ci/common/prepare_release.py b/resources/ci/common/prepare_release.py new file mode 100644 index 00000000..7a49f8e3 --- /dev/null +++ b/resources/ci/common/prepare_release.py @@ -0,0 +1,113 @@ +import distutils.dir_util # for copying trees +import os # for env vars +import stat # for file stats +import subprocess # do stuff at the shell level +import common +from git_clean import git_clean +from shutil import copy, make_archive, move, rmtree # file manipulation + +env = common.prepare_env() # get env vars + +# make temp dir to put binary in +if not os.path.isdir(os.path.join("..","artifact")): + os.mkdir(os.path.join("..","artifact")) + +# make temp dir for other stuff +if not os.path.isdir(os.path.join("..","build")): + os.mkdir(os.path.join("..","build")) + +# make dir to put the archive in +if not os.path.isdir(os.path.join("..","deploy")): + os.mkdir(os.path.join("..","deploy")) + +# make dirs for each os +for dirname in ["linux","macos","windows"]: + if not os.path.isdir(os.path.join("..","deploy",dirname)): + os.mkdir(os.path.join("..","deploy",dirname)) + +# sanity check permissions for working_dirs.json +dirpath = "." +for dirname in ["resources","user"]: + dirpath += '/' + dirname + os.chmod(dirpath,0o755) +# nuke travis file if it exists +if os.path.isfile(os.path.join(".",".travis.yml")): + os.remove(os.path.join(".",".travis.yml")) +# nuke test suite if it exists +if os.path.isdir(os.path.join(".","tests")): + distutils.dir_util.remove_tree(os.path.join(".","tests")) + +BUILD_FILENAME = "" +ZIP_FILENAME = "" + +# list executables +BUILD_FILENAME = common.find_binary(os.path.join(".")) +if BUILD_FILENAME == "": + BUILD_FILENAME = common.find_binary(os.path.join("..","artifact")) + +if isinstance(BUILD_FILENAME,str): + BUILD_FILENAME = list(BUILD_FILENAME) + +BUILD_FILENAMES = BUILD_FILENAME + +for BUILD_FILENAME in BUILD_FILENAMES: + if not BUILD_FILENAME == "": + if not "artifact" in BUILD_FILENAME: + # move the binary to temp folder + move( + os.path.join(".",BUILD_FILENAME), + os.path.join("..","artifact",BUILD_FILENAME) + ) + + # clean the git slate + git_clean() + + # mv dirs from source code + dirs = [os.path.join(".",".git"), os.path.join(".",".github"), os.path.join(".",".gitignore"), os.path.join(".","html"), os.path.join(".","resources","ci")] + for dir in dirs: + if os.path.isdir(dir): + move( + dir, + os.path.join("..","build",dir) + ) + + for BUILD_FILENAME in BUILD_FILENAMES: + if not "artifact" in BUILD_FILENAME: + # move the binary back + move( + os.path.join("..","artifact",BUILD_FILENAME), + os.path.join(".",BUILD_FILENAME) + ) + + # .zip if windows + # .tar.gz otherwise + ZIP_FILENAME = os.path.join("..","deploy",os.path.splitext(BUILD_FILENAME)[0]) + if env["OS_NAME"] == "windows": + make_archive(ZIP_FILENAME,"zip") + ZIP_FILENAME += ".zip" + else: + make_archive(ZIP_FILENAME,"gztar") + ZIP_FILENAME += ".tar.gz" + + # mv dirs back + for dir in dirs: + if os.path.isdir(os.path.join("..","build",dir)): + move( + os.path.join("..","build",dir), + os.path.join(".",dir) + ) + +for BUILD_FILENAME in BUILD_FILENAMES: + if not BUILD_FILENAME == "": + print("Build Filename: " + BUILD_FILENAME) + print("Build Filesize: " + common.file_size(BUILD_FILENAME)) + else: + print("No Build to prepare") + +if not ZIP_FILENAME == "": + print("Zip Filename: " + ZIP_FILENAME) + print("Zip Filesize: " + common.file_size(ZIP_FILENAME)) +else: + print("No Zip to prepare") + +print("Git tag: " + env["GITHUB_TAG"])