# This CI configuration file assumes we are going to use gitlab Shared runners at gitlab.com # due to gitlab possibilities, we use a mix of Windows and docker containers (the python image) to build the project. # the next variables are customized to the filepaths used when installing python and nsis with chocolatey on the windows runners. variables: PYTHON3_32: "C:\\python38\\python.exe" NSIS: "C:\\program files (x86)\\nsis\\makensis.exe" # The project defines 3 stages: # 1. Generate_docs: generates the documentation and update translation files. This uses the python docker image. # 2. Build: Creates the executable file by using a windows runner. # 3. Upload: Puts everything in an ftp directory. I had to use a docker container here because the Windows runner has all ports blocked. stages: - generate_docs - build - upload # This configures the environment for both channels .configure_environment: &configure_environment tags: - shared-windows - windows - windows-1809 before_script: - Set-Variable -Name "time" -Value (date -Format "%H:%m") - echo ${time} - echo "started by ${GITLAB_USER_NAME}" - choco install python --version 3.8.7 -y -ForceX86 - choco install nsis -y -ForceX86 - '&$env:PYTHON3_32 -V' - '&$env:PYTHON3_32 -m pip install --upgrade pip' - '&$env:PYTHON3_32 -m pip install --upgrade -r requirements.txt' - '&$env:PYTHON3_32 -m pip uninstall enum34 -y' # Create documentation in all available languages so we'll have it at http://socializer.su/documentation # this job is triggered on every commit to master, so we always will display the latest available version of the documentation in the website. # We are not using the configure_environment job cause it adds all the dependencies, which are not needed for this to work. documentation: stage: generate_docs image: python interruptible: true script: - echo "started by ${GITLAB_USER_NAME}" - python -V ### Dependencies. - python -m pip install --upgrade markdown # generate all html documents. - cp changelog.md doc/changelog.md - cd doc - python documentation_importer.py - cd ../src - python ../doc/generator.py - mv -f documentation ../ only: - master artifacts: paths: - documentation name: socializer_documentation expire_in: 1 day ### Updates all translation templates for weblate # this is also executed on every commit to master. # commented out while we find a way to push to a git repository from a gitlab shared runner. .update_translation_templates: stage: generate_docs tags: - windows10 interruptible: true script: - '&$env:PYTHON3_32 -m pip install --upgrade babel' - copy changelog.md doc\changelog.md - cd doc - '&$env:PYTHON3_32 documentation_importer.py' - cd ..\src - '&$env:PYTHON3_32 setup.py extract_messages -F babel.cfg --input-dirs . --output-file ..\scripts\socializer.pot' - '&$env:PYTHON3_32 setup.py update_catalog --no-fuzzy-matching --domain socializer --output-dir locales --input-file ..\scripts\socializer.pot' - cd ..\doc - '&$env:PYTHON3_32 translate.py' - cd .. # After generation, it's time to push all translation updates. - 'git config user.name "Windows runner"' - 'git config user.email "manuel@manuelcortez.net"' - 'git add scripts' - 'git add src\locales' - 'git remote set-url --push origin git@code.manuelcortez.net:$env:CI_PROJECT_PATH' - 'git commit -m "Updated locales [skip ci]"' - 'git push origin HEAD:$env:CI_COMMIT_REF_NAME' only: - master alpha32: <<: *configure_environment stage: build interruptible: true script: # Create html documentation firstly. - copy changelog.md doc\changelog.md - cd doc - '&$env:PYTHON3_32 documentation_importer.py' - cd ..\src - '&$env:PYTHON3_32 ..\doc\generator.py' # Writes version info useful for alphas. - '&$env:PYTHON3_32 write_version_data.py' # build it all. - '&$env:PYTHON3_32 setup.py build' # Once built, makes the installer for for alpha. - '&$env:NSIS installer_alpha.nsi' - cd .. - mkdir artifacts - move src\socializer* artifacts\ - cd scripts # Zips the folder in order to create the portable socializer version. - '&$env:PYTHON3_32 prepare_zipversion.py' - cd .. - move src\socializer.zip artifacts\socializer_x86_alpha.zip - '&$env:PYTHON3_32 scripts/generate_update_file.py' - move *.json artifacts only: - master artifacts: paths: - artifacts expire_in: 1 day # Generates a new stable version of the application every tag. stable: <<: *configure_environment stage: build interruptible: true script: - copy changelog.md doc\changelog.md - cd doc - '&$env:PYTHON3_32 documentation_importer.py' - cd ..\src - '&$env:PYTHON3_32 ..\doc\generator.py' - '&$env:PYTHON3_32 write_version_data.py' - '&$env:PYTHON3_32 setup.py build' - '&$env:NSIS installer.nsi' - cd .. - mkdir artifacts - move src\socializer* artifacts\ - cd scripts - '&$env:PYTHON3_32 prepare_zipversion.py' - cd .. - move src\socializer.zip artifacts\socializer_x86.zip artifacts: paths: - artifacts expire_in: 1 day only: - tags upload: stage: upload tags: - linux image: python interruptible: true script: - cd artifacts - python ../scripts/upload.py only: - master - tags - schedules