include: - project: "freedesktop/ci-templates" # the project to include from ref: "34f4ade99434043f88e164933f570301fd18b125" # git ref of that project file: "/templates/fedora.yml" # the actual file to include - local: "ci/images_template.yml" stages: - prepare - lint - test - release - deploy variables: FDO_UPSTREAM_REPO: "dabrain34/GstPipelineStudio" GNOME_RUNTIME_IMAGE: "quay.io/gnome_infrastructure/gnome-runtime-images:gnome-master" WINDOWS_RUST_STABLE_IMAGE: "$CI_REGISTRY_IMAGE/windows:$GST_RS_WIN_IMG_TAG" WINDOWS_RUST_STABLE_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/windows:$GST_RS_WIN_IMG_TAG" # Version and tag for our current container .fedora: variables: FDO_DISTRIBUTION_VERSION: "38" # Update this to trigger a container rebuild FDO_DISTRIBUTION_TAG: "2023-08-25.1" before_script: - source ./ci/env.sh - mkdir .cargo && echo -e "[net]\ngit-fetch-with-cli = true" > .cargo/config # If cargo exists assume we probably will want to update # the lockfile #- | # if command -v cargo; then # cargo generate-lockfile --color=always # cargo update --color=always # fi build-fedora-container: extends: - .fedora # our template job above - .fdo.container-build@fedora@x86_64 # the CI template stage: prepare variables: # clang-devel: required by rust bindgen FDO_DISTRIBUTION_PACKAGES: >- gtk4-devel clang-devel gstreamer1-devel gstreamer1-plugins-base-devel gstreamer1-plugins-bad-free-devel ninja-build pkg-config python3-devel python3-pip python3-setuptools util-linux xorg-x11-server-Xvfb wget git flex bison FDO_DISTRIBUTION_EXEC: >- ci/install-rust.sh stable && pip3 install meson .windows rust docker build: stage: prepare variables: # Unlike the buildah/linux jobs, this file # needs to be relative to windows-docker/ subdir # as it makes life easier in the powershell script # # We also don't need a CONTEXT_DIR var as its also # hardcoded to be windows-docker/ DOCKERFILE: "ci/windows-docker/Dockerfile" GST_UPSTREAM_BRANCH: "1.22" tags: - "windows" - "shell" - "2022" script: # We need to pass an array and to resolve the env vars, so we can't use a variable: - $DOCKER_BUILD_ARGS = @("--build-arg", "DEFAULT_GST_BRANCH=$GST_UPSTREAM_BRANCH", "--build-arg", "RUST_VERSION=$RUST_VERSION") - "& ci/windows-docker/container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $RUST_IMAGE $RUST_UPSTREAM_IMAGE $DOCKERFILE" - | if (!($?)) { echo "Failed to build the image" Exit 1 } windows rust docker stable: extends: ".windows rust docker build" variables: RUST_IMAGE: !reference [variables, "WINDOWS_RUST_STABLE_IMAGE"] RUST_UPSTREAM_IMAGE: !reference [variables, "WINDOWS_RUST_STABLE_UPSTREAM_IMAGE"] RUST_VERSION: !reference [variables, "GST_RS_STABLE"] .msvc2019 build: stage: test tags: - "docker" - "windows" - "2022" windows installer stable: needs: - job: "windows rust docker stable" artifacts: false image: "$WINDOWS_RUST_STABLE_IMAGE" extends: ".msvc2019 build" script: - rustc --version - git fetch --tags - "& ./ci/build_gps.ps1" - "& ./installer/wix/prepare_gstreamer.ps1" - "& ./installer/wix/build_installer.ps1" artifacts: paths: - installer/wix/*.msi expire_in: 10 days when: "manual" rustfmt-clippy: extends: - .fedora - .fdo.distribution-image@fedora stage: lint script: - meson build - cargo fmt --version - cargo fmt -- --color=always --check - cargo clippy --version - cargo clippy --color=always --all-targets -- -D warnings windows installer release: extends: "windows installer stable" stage: release only: - flatpak - tags artifacts: paths: - installer/wix/*.msi when: "always" linux release: extends: - .fedora - .fdo.distribution-image@fedora stage: release only: - flatpak - tags script: - meson builddir -Dbuildtype=release - ninja -C builddir/ dist artifacts: paths: - builddir/meson-dist/* when: "always" test-stable: extends: - .fedora - .fdo.distribution-image@fedora stage: test script: - meson build - rustc --version - cargo build --color=always --all-targets - > xvfb-run -a -s "-screen 0 1024x768x24" cargo test --color=always rustdoc: extends: - .fedora - .fdo.distribution-image@fedora stage: release only: - flatpak - tags variables: RUSTDOCFLAGS: "-Dwarnings" script: - meson build - rustdoc --version - cargo doc --no-deps dist-package: extends: - .fedora - .fdo.distribution-image@fedora stage: release only: - flatpak script: - meson build - ninja -C build dist flatpak: image: $GNOME_RUNTIME_IMAGE stage: test variables: MANIFEST_PATH: "build-aux/org.freedesktop.dabrain34.GstPipelineStudio.Devel.json" APP_ID: "org.freedesktop.dabrain34.GstPipelineStudio.Devel" BUNDLE: "gst-pipeline-studio-nightly.flatpak" script: - flatpak-builder app ${MANIFEST_PATH} - flatpak build-export repo app - flatpak build-bundle repo ${BUNDLE} ${APP_ID} artifacts: name: "Flatpak artifacts" expose_as: "Get Flatpak bundle here" when: "always" paths: - "${BUNDLE}" expire_in: 14 days cache: key: "flatpak" paths: - .flatpak-builder/downloads/ - .flatpak-builder/git/ - target/ - target_test/ when: "manual" macos installer stable: stage: test needs: - job: "windows rust docker stable" artifacts: false tags: - gst-macos-11.1 before_script: - pip3 install --upgrade pip # Make sure meson is up to date - pip3 install -U meson # Need to install certificates for python - pip3 install --upgrade certifi # Another way to install certificates - open /Applications/Python\ 3.8/Install\ Certificates.command # Get ninja - pip3 install -U ninja script: # rust toolchain - curl https://sh.rustup.rs -sSf | sh -s -- -y - source $HOME/.cargo/env # brew install - /bin/bash -c "./installer/macos/brew_setup.sh" - /bin/bash -c "./installer/macos/deploy_macos.sh" artifacts: name: "MacOS installer" paths: - installer/**/GstPipelineStudio*.dmg - installer/**/GstPipelineStudio*.tar.gz expire_in: 14 days when: "manual" macos installer release: extends: "macos installer stable" stage: release only: - flatpak - tags artifacts: name: "MacOS installer" paths: - installer/**/GstPipelineStudio*.dmg - installer/**/GstPipelineStudio*.tar.gz when: "always" pages: image: ruby:2.7 stage: deploy script: - gem install bundler - bundle install - bundle exec jekyll build -d public artifacts: paths: # The folder that contains the files to be exposed at the Page URL - public rules: # This ensures that only pushes to the default branch will trigger # a pages deploy - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH