Kubernetes? It was the future, yesterday. Now everything is serverless -- It's the future.
What I mean to say is that the landscape is constantly shifting. At the moment, it looks like the paths forward for the majority are to be comfy using other people's computers (cloud computing / DevOps / SRE), to be the people swapping disks / chassis / cables in a cloud provider's datacenter full-time, or to be help desk. But two years from now, who can say? The only constant is change. Keep your eyes open and stay on your toes.
So, it's been a while since I posted about PNC:R last. Not that I've been idle, oh no.
An initial alpha release of the mod is imminent now - pretty much all of the functionality of the 1.7.10 original is now replicated, along with a couple of small new features and a few subtle changes here and there. But it's the PneumaticCraft you remember!
This video shows a couple of the new features: * The Aphorism Tile can now show markup (using Alt + 0-9,a-f, l-o & r), and has some popup help to show the key binds. * FMP support has gone, of course, but after a fair bit of testing, I decided not to include MCMP2 multipart support at this time. MCMP2 is just not quite there yet as far as stability goes (and that's in general, not just with PNC:R)
Instead, there are two new features: * Wrenching a tube section will toggle it open/closed * New Camouflage Applicator tool to hide camouflageable blocks (tubes, elevator base & caller, pneumatic door base, charging station)
Now, there are prerelease JARs available already:
These are dev builds. I don't recommend adding them to an important world just yet. They probably won't kill your world, though :)
If you do play with them, please be prepared to raise sensible issue reports on GitHub: https://github.com/desht/pnc-repressurized/issues. Include stack traces (gist/pastebin/etc.) and useful notes on what happened and how to reproduce it.
All going to plan, things are being built on CI right now --> https://circleci.com/workflow-run/e7a8fdd7-3953-47ac-8d06-f7f1aa923e29
Circle CI has positioned themselves as a modern Jenkins replacement, but I should note I haven't seen them used over a long period of time which is the real measure of quality. Honestly most pipelines seem to be better suited to workflow frameworks like Apache Airflow than these CI/CD specific tools, they may be a little harder to learn up front but they seem to be more resilient to the type of customization that usually gets you in trouble with Jenkins down the line.
Terrible article. Doesn't cover any players in docker CI. just mentions Jenkins. doesn't even mention the Jenkins Docker plugin.
No problem with Jenkins, but it's hardly the whole of the market for CI let alone the unique angle that CI on docker brings.
Ones I've been looking at beyond the usual (Jenkins/Travis):
I'm sure there are loads more. This is an interesting space because CI/CD seems like an obvious outcome of docker but there's still a lot of uncertainty: Do you build your code, test it then put it into a container and ship that? how does that work with complicated interrelated container networks where you have links, volumes, etc.
I'm a maintainer of a fairly small FOSS project.
Due to the nature of our project, we need to run end-to-end tests against actual AWS infrastructure. In order to avoid putting the project owner's AWS account at risk, we decided to add a "manual approval" step to our CircleCI workflow. We manually sanity check the PR, and only if it seems clean do we proceed with test execution.
Unfortunately while we were testing this approach we discovered that contributors can simply remove the manual approval step from .circleci/config.yml
and skip it.
We tried asking for advice on their forums, but didn't get a single reply. Other than that, we don't really have any way to contact them.
I get it, we don't pay them anything, so we have limited room to complain. But it's still frustrating.
Came across this incredibly funny article about the new techs, Docker, Kubernetes and stuff...
I've never coded for such products, but it feels soooo overwhelming. Not even taking about the bazillions JS frameworks... Maybe it's because I'm outside the zone ?
Not that simple and straight-forward though.
For instance, the call between the front-end server (Node server) and backend API, might not be a typical JSON-based REST API call. JSON stringification and parsing can be pretty slow; and because you are in control of both these servers; you might want to use protocols that are faster than REST/JSON.
That's where complex interface protocols like protocol buffer or thrift come in.
Then, you've to ensure high availability. Say, there are 15 instances of front-end servers, and 72 total instances of various back-end services.
Any of these instances have internal DNS based naming - so, now you need a service discovery protocol. You'd also need health-check support - in case one service goes down for whatever reason, the health check service would remove it from the pool, and update internal DNS entries.
If a new service instance comes up online, it would need to be added to the list of services ready to accept these connections.
Here's a great intro on how complex a back-end can be: https://circleci.com/blog/its-the-future/
It's a sarcastic post, but they aren't too off of their point. They also have a serious follow-up post to this.
A starting point would be to search for postmortems. I've found something from CircleCI, Cloudflare and GitHub by searching for "postmortem infrastructure".
your best bet is going to be to use a package manager to install whatever you are building with in your CI pipeline so that you have consistent results. If not that, use the JDK built into your studio since it is widely used for android dev work and fairly easily replicated on everyone's machines.
for example: circleci machine image includes openjdk8 and openjdk11 with 11 as default.https://circleci.com/docs/2.0/android-machine-image/
or if we look at the full "about" from latest studio, we can see it is openjdk 11 as well. very similar to what is in the CCI image so likely a safe bet to use it.
Android Studio Arctic Fox | 2020.3.1 Patch 2 Build #AI-203.7717.56.2031.7678000, built on August 26, 2021 Runtime version: 11.0.10+0-b96-7249189 amd64 VM: OpenJDK 64-Bit Server VM by Oracle Corporation Windows 10 10.0 GC: G1 Young Generation, G1 Old Generation Memory: 1280M Cores: 64 Registry: external.system.auto.import.disabled=true
​
I can't can't comment on Oracle JDK's have not used them since 1.7 and probably 2016.
> "This is a real bummer. We were hoping Microsoft would flat-out buy us; now, instead, they've copied our idea and thereby destroyed our business model."
If GitHub Codespaces "destroys" Gitpod's business model the same way that GitHub Actions "destroyed" CircleCI's business model, then sign me up!
https://circleci.com/blog/announcing-circleci-s-100m-series-e/
Travis CI is a dead product. Some company bought them up, fired all of their people and sold their assets.
You should look into CircleCI I believe it also has a free plan and it is similar.
Who knows what support for Rust in travis is like, given that its a somewhat new language. Shouldn't matter very much but Circle also works with Docker if you should need to use something like that.
Wide acceptance is because the founders are some well known hackers. Perhaps they are backed by large VC fund to be afloat for so long, though looking at the size of their team https://circleci.com/about/team/ i am surprised at the things they are missing.
I would heartily recommend a static content generator (I use Jekyll on github pages) and a build chain to manage the updates. A build chain isn't necessary but its nice to have a single action to go from commit to a new site.
I've seen a few articles describing how too use Lambda to form the build chain (event is a code update, lambda pushes files to S3) but I would probably use something like CircleCI. They have a Jekyll example in their documentation:
Mostly these postmortems are found on the blog of the company. Here's the first one I could think of that is a postmortem of an incident that CircleCI had a few months back.
I typically use https://circleci.com and https://shippable.com -- both are pretty close to equal in terms of speed, cost, and configuration (free builds / month). AWS CodeBuild is also not actually terrible if you want something cheap and barebones (and still be able to natively build Docker images).
As you are stack
user, the most easy way for you is to add your package to Stackage. Then you'll be pinged whenever your package bounds are too restrictive.
If you want to be proactive, you can add <code>packdeps</code> task to your CI. Travis supports periodic jobs automatically, Circle CI has https://circleci.com/docs/1.0/nightly-builds/ Or you can subscribe to the feed on the website: e.g. http://packdeps.haskellers.com/feed?needle=vector
And the last: how to automate bound handling / testing. If your CI uses cabal new-build
, you could add cabal new-build --allow-newer yourpkg:*
which will try to build your package with its (but only its!) dependencies' upper bounds omitted. I guess you can do that with stack
, but it will be more complicated (you'll probably rely on cabal
to construct your a snapshot).
The missing part is how to automate "there's new version of a dependency", "my CI says it's ok to use", "alter the source", "make a revision on Hackage". With Cabal-2.2
we will have working parse-print round trip (though ruining the formatting) of .cabal
files, so you could hack something together (something more robust then fancy regexes, it is).
Sorry, I uploading the RPM but it broke my update server (woops) so I had to take them down again till I figure out how to do it.
You can download them yourself from the CI build on Circle CI here
https://circleci.com/gh/MarshallOfSound/Google-Play-Music-Desktop-Player-UNOFFICIAL-/89#artifacts
CircleCI - https://circleci.com/ has served me pretty nicely so far, the tests are run within Docker containers, so you can pretty much do anything. Run tests, upload artefacts, send out email or push to web sockets over Slack, Hipchat, IRC etc. Pretty extensive Android support - https://circleci.com/docs/android although the emulator is pretty slow and quite annoying with regards to flaky UI tests (I use espresso)
My first simple piece of advice would be to convert your comments into names, it's both verbose and useful e.g:
- run: docker build -f flask/Dockerfile -t flask flask/
name: Run flask image
Besides styling, you don't have to set up all those container dependencies (Postgres/network/etc) manually. Check it out here: https://circleci.com/docs/2.0/databases/#postgresql-database-testing-example
So your yaml
can get more focused on building + testing your flask container. Hope I helped! Let me know if I was unclear.
> You should use the cimg/ruby convenience images now: https://github.com/CircleCI-Public/cimg-ruby
Nice. I'm assuming the benefit is it lets us specify full version? I've also had some issues with CircleCI being a little laggy about releasing support. I tried to add Ruby 3.0 tests a few days after it was released and their image for it wasn't built yet.
> I would also recommend using commands for re-usable named commands, rather than yaml anchors.
I didn't know I could do that. Is there a benefit of using commands? Just looks nicer?
Found the docs here https://circleci.com/docs/2.0/reusing-config/#the-commands-key
Basically a docker container acts as a VM to run your tests. I've only used circleci, but you just need to connect your repo to the ci (very easy), and add a config file to your project. This config file is a yaml file where you describe all the steps (ie commands) the docker container should run. So you need to set up your testing environment (test as env, bundle and yarn install, db:seed or similar) and run bundle exec rspec to launch the tests. For every new push to the repo, the ci will pick up on it, run the tests and let you know if they pass or fail.
You can read more here : https://circleci.com/docs/2.0/postgres-config/
You can set environment variables within circleCI so that you don't need to set them in a container, which could expose the secrets everywhere you push the container to.
https://circleci.com/docs/2.0/env-vars/#setting-an-environment-variable-in-a-project
This has a different info: 4 containers, unlimited builds for OSS: https://circleci.com/open-source/ Unless I misread (from the phone), but it was my impression, and we are using it for a long time...
What's installed on the host machines is irrelevant.
And I mean that in an exciting way. The way the industry is going with containers, microservices, etc, we're able to build amazing things at different layers.
I don't have intimate knowledge of what runs on the host machines myself but we do have two blog posts that provide a lot of insight on what's running:
>Side note: Has anyone ever seen how most companies do this? How many people typically get to the take-home assignment stage of an application? 5? 10? More?
I don't know, but according to this article, about 17% make it from application to screen, and at this particular company, 12% of applicants make it to the take-home assignment.
Have you heard of Circle?
It sounds like you're trying to get a single tool to do everything, which is kinda funny to me that you're running a service oriented architecture.
Maybe what you want to do is start thinking about what components you need to build a cloud-portable stack, rather than a single thing that does everything.
Kuberenetes is already a good base to deploy on.
Service composition:
CI/CD (I'm not really an expert here)
Monitoring:
Secret Managment:
On the topic of Travis CI, if any of you (OP or anyone reading) has a .edu email address (e.g. from a college/university), the Github Education Pack includes free use of Travis CI.
Otherwise, CircleCI has a free tier of use.
Some good starting points for getting started on learning continuous integration whether you're a student or not.
Plenty of startups use Clojure, and they seem to scale just fine. CircleCI is a great example. Developers that are already at the company will typically have developer connections themselves.
Even barring that, you typically get a better crowd when you advertise for functional languages. Since they are niche, people who are familiar with them tend to be more experienced.
This looks cool! A few quick answers that others could disagree with:
The build+pass badge represents that you have automated tests, and that they're passing. I suggest using circleCI for running your tests:
https://circleci.com/docs/status-badges
...but you'll also need to HAVE tests, and have a "test" script in your package.json that runs them. Testing is a bigger subject; I suggest learning how to test your library with the mocha library:
http://ricostacruz.com/til/get-started-with-mocha.html (random post I found on the topic that seems like good start)
As far as speed, I'm not so sure — string manipulation is already really fast compared to other big JS speed killers like DOM manipulation. I would suggest adding an index.js that exposes the function; that way people who install it as a node package can easily use it. Details here: https://docs.npmjs.com/getting-started/creating-node-modules
Are the modules located in a specific place? I was planning on writing a Wordpress style updater, where the zip doesn't overwrite the 'wp-content' folder and you can update the modules individually.
Here is an example of what the rate limit error looks like. I don't know off hand what the limit is, but we would run into it doing back to back composer installs of a Laravel project, i.e. multiple installs on the same server.
How are you guys handling dirty vendor directories on update? Are you setting a discard-changes value?
By the way, Mothership looks great! There is definitely a need for a decent e-commerce platform, especially with built in POS.
A lot of Clojure shops are open to remote work. I have friends who work with CircleCI and DilligenceEngine for example, both are working remotely without any issues. Today, it's very easy to communicate with your team without you all having to sit in the same physical office.
There are a couple of factors contributing to this. First, the companies using Clojure tend to be more open minded in general, and the pool of developers is smaller. So, they'd rather hire a good developer that works remotely than limit themselves to who's available locally.
A while ago I saw a presentation by Allen Rohner of CircleCI on the challenges they faced when they building certain functions for their application using Clojure on top of JRuby, probably it will make sense to you.
You can watch his presentation here (requires creating a free account, but it's worth it).
You can obtain the slides from this Repo (the file is called "Rohner-JRuby.pdf")
I've been using CircleCI (https://circleci.com/) for the past couple weeks with a Django project. Although it takes a bit of fiddling with the YAML file to get it up and running, it's awesome once it is up and running. It's very fast, has a PostgreSQL database for DB, migration, and unit testing, and it also supports Selenium for UI testing. Also quite affordable starting at $19/mo for a single container (eg. 1 build at a time).
> Through wine?
> I don't want a full VM just for that
Use a continuous integration service to build the code:
files with poetry.lock and pyproject.toml gets updated automatically.
Each time someone runs poetry install, devs will get exactly the same dependencies (https://circleci.com/blog/preserve-build-integrity-prevent-problems-deterministic-builds/)
​
Imo, each step should be as deterministic as possible, otherwise you will have the fun problem 'it works on my machine' and you will have to compare deps one by one
We use CircleCI, along with Fastlane for signing and uploads, to test, build and deploy our mobile app for iOS and Android.
It works and we have been happy with CircleCI's platform.
I've written about our mobile build pipeline here and I also maintain an open source app that follows a very similar build process:
https://github.com/ThreeDRadio/threedradio-app/tree/master/app
Thanks for the callout u/aspleenic! We're excited to offer more build minutes and access to features previously reserved to the Performance Plan, like flaky test detection, Docker layer caching, access to more resource classes and more. There's more info available about what we're offering on the new FREE plan, and why, at https://circleci.com/blog/most-generous-free-cicd-plan/
I had to solve the same issue with NodeJS-based microservices, and I found a good setup using CircleCI. I followed this this example, which uses some git magic to check whether individual folders within your repo have changed since the last CircleCI saw them, and executing specific workflows (or not) based on that.
It looks like there may be other ways now too - CircleCI is rolling out new features like Dynamic Configs that may make this easier. This orb seems like a strong contender.
that is a very nice question. I have been in the same situation for a while
I usually maintain my learnings in the company in a simple Github gist. One thing you could do is after every sprint or release cycle do a [personal retrospective](https://circleci.com/blog/a-guide-to-personal-retrospectives-in-engineering/) this might help you jot down points where you failed and succeeded and, to be honest, I doubt anyone would be able to log everything. Just go with a summary of your work every week if possible
It looks ok to me. I would probably debug the pipeline with SSH (https://circleci.com/docs/2.0/ssh-access-jobs/) and see if the filesystem has what I expect to be mounted. It might also be something else causing the problem, so run manually the terraform plan
and see what happens there.
Who should own the troubleshooting.... THE never ending debate.
There’s a good article I’ve read long time ago
>DevOps didn’t exist when I started as a developer https://circleci.com/blog/devops-did-not-exist/
The author ended the article with:
DevOps is…
DevOps is NOT…
The same way you test all external resources. Integration tests.
Here's a decent, but a bit old, article on the subject.
This isn't some new idea. It's been standard practice for years.
> all professional developers use IDEs
That's certainly not true.
Professionals fall for fashions just the same as everyone else. Especially in programming: "professionals" poo-poohed Apple's GUI and sneered at anyone using it, until Windows 95 came out, then instantly discovered that GUIs are more productive than text interfaces (except when they aren't). Windows professionals have a 35 year history of sneering and ignoring features that Apple develops (or steals...) until Microsoft brings out the same feature, then its the greatest thing since sliced bread.
Windows professionals hated anything and everything to do with Linux until Microsoft brought out the Linux subsystem for Windows, and Powershell, and now suddenly scripting is cool again.
Apple devs have their own fashions. Why do Macs still use a single-button mouse?
Remember when you couldn't move for XML? Everything was XML. Now everything is JSON.
In Python, type checking was the worst thing ever until Guido introduced type-hinting and mypy, and now everyone loves type checking.
IDEs are a fashion statement.
And the result of the fashion for IDEs is you can be a professional with two years experience in Python, and still get just 53% on a test of basic Python knowledge. And that's better than 70% of the professionals doing the test.
I've tried a few IDEs. Never found one that isn't either too slow, too annoyingly opinionated, or that doesn't get in the way of coding. Or all three.
Not the case. This is exactly what Contexts are for. All our unprivileged steps (like linting, build, etc...) run in a different context from our e2e tests. (And a different context again from our documentation deployment workflow)
With CircleCI you can limit access to context variables to a specific group. So for example your team can execute jobs normally, but external commits will fail to run CI as Unauthorized
. This does not work with Bitbucket IIRC.
Circle ci has a pretty great "orbs" config which out works the box, with the 8 line example yml, with caching enabled etc. I setup a simple project which runs clippy/test/build all in around 50s from cold! https://circleci.com/developer/orbs/orb/circleci/rust
What version of CircleCI are you defining? Are you utilizing workflows? I would recommend a Matrix Job](https://circleci.com/docs/2.0/configuration-reference/#matrix-requires-version-21), as you can run the same job concurrently while passing different parameters.
Whenever you do checkout step then your repo is cloned to CI container. When you push a new commit to github then you want to pull exactly that commit to the CircleCI container so it can run tests against your codebase based on that commit. So basically you don't want to cache the repository itself.
steps: - checkout
You can cache stuff like installed npm libs or ruby gems. You can see CircleCI cache examples and CircleCI docs
Hi u/koett. I've done lots of work with configuring CircleCI, and I know it can get really tricky!
I would recommend checking out the CircleCI documentation for Workflows, as those allow you to specify filters for when a job, or sequence of jobs, gets run: https://circleci.com/docs/2.0/workflows/. The filtering would allow you to ignore any version tags which are pushed so that you don't end up in a loop of triggered jobs.
Let me know how you get on.
Typical CI services let you set environment in their software, so they would not be committed to your repository.
As an example, here's some Circle CI documentation about it.
Yeah, CircleCI stores it in the artifacts section when we use the following command
- store_artifacts: # for display in Artifacts: https://circleci.com/docs/2.0/artifacts/
path: app/build/reports
destination: reports
​
For the automatic uploads to the play store, we use Gradle Play Publisher which auto-increments the version code
So there's like millions of different opinions about how to write good unit tests and IMO it all depends a lot on the language and technologies you're using to write them but there's consensus on that they should be readable, fast and deterministic. I'd recommend to read about the Fail-Fast approach. Integration tests is kind of the same but achieving fast builds here is even more challenging since depending on how many components you need to test and how much data you need, setting up the scenario can be really time consuming so builds end up taking minutes or hours. Usually it's recommended to cache dependencies as much as possible and/or use Docker containers (if the CI where you run them allows it) to speed up the process - using containers is like creating an image of the whole system where your tests run so that you don't need to set it all up on every build, you just create it from the image.
About resources to learn about the tools I mentioned, here you have some: - https://www.guru99.com/selenium-tutorial.html (have a look at the rest of their site, those guys have a bunch of good resources about QA) - https://circleci.com/docs/2.0/tutorials/ (though I think the best here is to give it a try and experiment) - https://docs.docker.com/get-started/ - AWS is so massive that it'd be difficult to point at a particular resource aside from their docs and certifications. This one I really recommend to play with it with a free account and learn as you go, starting by EC2 instances and CodeBuild which are ones you'd probably use to set up test automation there.
You need to set up the project on CircleCI. Your code must be in GitHub or Bitbucket so you can connect the repo to your CircleCI account.
Please read the CircleCI docs, it explains how to do this: https://circleci.com/docs/2.0/getting-started/#section=getting-started
I really like the GitHub actions offering. Looks promising, but I haven’t personally had much experience with it yet. I do have some customers using it and they have a lot of positive sentiment.
Anyone out there have some feedback on GH actions?
The typical CI/CD systems I recommend are: - Travis CI is free for open source projects. Easy to use and setup. Links directly to your repo. - Circle CI has a free tier and has a lower price point than Travis. Easy to use and setup. Links directly to your repo. - Jenkins is the tried-and-true solution, but does require more setup and maintenance. Used heavily by enterprise organizations and teams that need a custom fit solution.
The typical solution is to use some kind of environment variable to figure out what environment you are in. I'm certain both CircleCI and GitHub have documentation on how to use environment variables (here's the CircleCI docs: https://circleci.com/docs/2.0/env-vars/).
As for the code you need something like this:
import os env = os.environ['ENVIRONMENT']
if env == 'LOCAL': # Do local stuff elif env == 'CIRCLECI': # Do CircleCI stuff else: raise Exception('Unknown environment.')
So to run your script in the local environment you'd invoke it with an extra environment variable: ENVIRONMENT=LOCAL python script.py
.
Yes, it did trigger a build.
#!/bin/sh -eo pipefail # No configuration was found in your project. Please refer to https://circleci.com/docs/2.0/ to get started with your configuration. # # ------- # Warning: This configuration was auto-generated to show you the message above. # Don't rerun this job. Rerunning will have no effect. false Exited with code exit status 1
for anyone else who finds this thread, it could be useful to know there are some containers provided by circle ci some which have extra functionality like working browsers included which is needed if you use figwheel tests..
> I find the term "serverless" a bit silly.
Yeah, we find it silly. I work with developers...anything where they can fling an HTTPS call at an endpoint and It Just Works!^TM might as well be serverless. They just don't see anything below the API response.
The problem I'm seeing is that everyone is chasing newest hottest shiniest at an incredibly rapid rate, such that no one stops and says stuff like, "Hey, doesn't this lock me into my cloud provider forever?" or "Hey, wouldn't doing XXX be cheaper?" When developers are controlling the architecture choices, they tend to pick resume-padding stuff and everything tends to become "legacy" after a few months.
We don't do that anymore, it's so 2017...we're on serverless lambda functions. It's the future
CircleCI with haskell-works
orbs (https://circleci.com/orbs/registry/orb/haskell-works/haskell-build)
and cabal-cache
for binary cache.
Example: https://github.com/haskell-works/avro/blob/master/.circleci/config.yml
Lazily looking at looking Azure and GH Actions.
You are right. Commits to master are usually small so you would rarely find anything major unless you step back and see the bigger picture. In this sense, wouldn't you agree that a code base with all these tests is pretty interesting? https://imgur.com/nfJ3oNW
See full test results at https://circleci.com/gh/omisego/plasma-contracts/9535 -> Expand the "Run tests" step and scroll towards the middle.
You probably refer to what kind of executor to use: https://circleci.com/docs/2.0/executor-intro/#section=configuration
The advantage of using docker as executor is that it's more lightweight; starts up faster on CI side.
The disadvantage of docker over a machine executor is that you don't really run the container, but inside a container. For the setup at my job, we use the machine executor to build the container first, push it to an image registry (quay.io) and pull it back in, in test part of the flow to run tests in. That way, you have the same container that's used for the tests as the one used in production. The disadvantage here is obviously that it's slower.
Well, in my team we have solved this via workspaces. You can add any temporary file to the workspace in one job, and then attach it in another job.
Here is the link to get the whole idea of workspaces: https://circleci.com/blog/deep-diving-into-circleci-workspaces/
This looks to be the list of preconfigured images, but I don't know if these are the only ones you can use or if it will just look on docker hub and pull from there.
Looks like the version of gcc that comes with bionic is not new enough to support that c++17 header.
It's possible to use custom docker images, but I don't know anything about that so can't offer any advice.
CircleCI and Gitlab are both hosted and free. CircleCI integrates well with github and for gitlab I just mirrored my project and set up the pipline on gitlab itself. They both have extensive documentation, although I got my project up and running by borrowing pieces of config from bigger projects.
​
AppVeyor is also hosted, free and allows windows builds. Again I got going initally by copying from another project then modifying as required.
Hey. There are a ton of CI/CD solutions (Gitlab, Jenkins, Travis, Bamboo...) and it's hard to compare all of them as one has to use them to really gain insight on how good they are. CircleCi and Bitrise are one of the most popular for mobile development.
As for your other question. If you don't like having a separate subscription for iOS/Android then CircleCI can be problematic as they separate Linux and Mac machines with completely different pricing: https://circleci.com/pricing/
This is not the case with Travis and Bitrise.
You could consider putting npm publish
in your ci config. Then you won't have issues with untracked files in git (did you do $ git add .
before publishing?)
https://circleci.com/blog/publishing-npm-packages-using-circleci-2-0/
Github + CircleCI.
Build a simple Go app. Something that's a health check saying, "Hey, I'm up". Use Circle to compile/build the app and then run tests on the app. Tests can range from functional tests, to lint tests, to even vulnerability scans on the dependencies.
Then use Circle to also do the CD part. If all tests pass, deploy to a "staging" and then to master.
Then, start expanding on your app. Add features to it. Maybe add a front end aspect to it. With every commit, have the CI/CD process being followed through.
CircleCI docs are pretty good too.
Finishing your tickets on time is important but it is just a small part of your scope as an engineer. Here's an idea of the expectations of a SWE at each stage of their career: https://circleci.com/blog/why-we-re-designed-our-engineering-career-paths-at-circleci/
If a company evaluate engineering performance purely on "tickets completed", it means that they treat engineering as a factory process. Meat goes in and sausage comes out. And that means that you can be fucked over if the PM decides to put more tickets in your sprint.
Moreover, if engineers are treated like headcount, they will not invest in your career development as a software engineer. You're a white collar worker, not a sausage factory worker. That's not optimal for your growth as an engineer.
Yes, GitHub Actions can run in parallel. I mainly use CircleCI at work, and CircleCI also supports parallel jobs on their paid plans. With Workflows you can also build a massive pipeline on CircleCI and reuse stuff from previous jobs.
I guess when you're already using CircleCI and you're on the paid plan, then why not just have everything there?
The one feature I really like from Travis CI is matrix. Makes testing an OSS package on different versions super easy.
There's not much to set up really, just when you're viewing a Job on CircleCI in the top-right there's a button to "Rerun workflow". You can click the drop-down to "Rerun job with SSH". This will rerun the job but add an "Enable SSH" step producing something like ssh -p 12345 123.45.678.99
. You can run this on your local machine in a terminal to gain access to the container, look around, check things are where they should be, and run commands to check they work. Invaluable for debugging jobs if you ask me.
Here's the official docs on the subject if you need further help.
Man that does indeed suck, I was a tad bit interested in something that was both Functional and OO. Also thanks for getting back to my comment so quickly. I'm a bit new to CircleCI, are you able to direct me to a version that might be able to install correctly without that cmake error? Only if there isn't any trouble, don't wish to bother you. :). https://circleci.com/gh/skiplang/skip
There's a great guide for continously deploying extensions here: https://circleci.com/blog/continuously-deploy-a-chrome-extension/
You can find the deployment endpoint under publishing. You'll also need to open the api on your Google dev account and fetch some tokens - the article goes through all of these.
Good luck.
My point is that building a simple CRUD web application is much more complex compared to a "simple" windows forms application and just saying "this is how we do things now" doesn't address that.
I guess you could argue that in those cases you should just build a Windows forms application and forget web altogether. But then you miss the advantages of an online application, you can use anywhere, easier to deploy to end-users etc.
In theory, a dedicated client-server type browser, which only focusses on database/data entry type applications could theoretically make developing such systems easier and less complex.
You could use a branch filter, and have a production
branch. Instead we have a single release branch, we deploy everything to our staging servers, then have an approval gate that needs to be clicked in CircleCI. Once that's checked, the jobs are run to deploy to production. The production deploy jobs just require
the approve-deployment job.
https://circleci.com/blog/manual-job-approval-and-scheduled-workflow-runs/
Excerpts from my config below:
- approve-deployment:
type: approval
requires:
- deploy-frontend-staging
- migrate-staging-database
- deploy-backend-staging
filters:
branches:
only: master # We can only deploy master
tags:
only: /v[0-9]+(\.[0-9]+)*/ # We can only deploy versioned commits
...
- migrate-production-database:
requires:
- approve-deployment
- deploy-backend-production:
requires:
- migrate-production-database
- approve-deployment
what you are looking for is circleCI's branch filter.
https://circleci.com/docs/2.0/configuration-reference/#branches
So you'd run all your tests like normal and have a deploy_to_staging step that, not surprisingly, deploys to staging and only runs for merges to your staging branch. Then you'd do the same thing but for master+production.
You can try GitHub actions https://github.com/features/actions
Circle CI https://circleci.com/pricing/
But there are a ton others as well. It will really come down to what CD means to you as to which tool make sense.
> I will probably have 2 or 3 services communicate to each other internally. Should I just use REST between them or try some other protocol (gRPC etc)?
If you are doing this to learn I think either option is fine. What are you more interested in learning? There's probably more to learn with gRPC if you are familiar with REST in other languages.
​
> I want to build good CI pipeline with automatic deployments. Which service do you recommend?
CircleCI (I am biased)
​
Thanks for the pointer. I tested again and it took 312307 ms to start all 138 services locally in a docker container (Macbook Pro 2.2 GHz 16GB DDR3).
Here's the log with verbose logging from CI build: https://circleci.com/gh/ychescale9/release-probe/1044?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link
Now I'm getting "com.android.builder.testing.api.DeviceException: No connected devices!" when I try to run connectedAndroidTest after the emulator is fully booted.
If we could get this to work I would still quite happy as I'm sure boot speed will improve overtime.
Another question: any change this gets backported to pre-API-27?
Thanks. I was able to get emulator-headless
running by installing libc++1
in my docker image. However when I try to run tests I'm getting adb: failed to install xxx.apk: cmd: Can't find service: package
.
When I do adb shell service list
I get a much shorter list of results than usual (e.g. the settings service is also not available).
Full log available here: https://circleci.com/gh/ychescale9/release-probe/1034?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link
My docker image: https://github.com/ychescale9/docker-android-images/blob/master/android-emulator-28.Dockerfile
Command used to start emulator: $ANDROID_HOME/emulator/emulator-headless -avd "api-28" -no-snapshot -no-accel -no-window -gpu swiftshader_indirect &
Then running $ANDROID_HOME/platform-tools/adb install -r xxx.apk
would produce the error above.
Is there anything obvious I'm missing? If not I'm happy to file a bug and link my project there.
Really appreciate your team's responsiveness and willingness to help here!
I've personally had very good experiences with CircleCI for Linux and macOS targets, both in the open source and enterprise world.
I haven't personally tried it out, but Azure Pipelines might be another thing worth looking into, particularly since they can handle builds for Linux, macOS, and Windows on a single platform.
Do you mean having a merge kick off a test? You can integrate workflows into your GitHub.
You can look at continuous integration solutions such as Travis or Circle.
Alternatively you can repost this question in r/devops. They'll have lots if answers there.
We're using the 'new' workflow system in circleci, and that supports branch filters: https://circleci.com/docs/2.0/configuration-reference/#branches, so you can trigger some jobs only on master or develop. We're currently using this in a highly CD environment (~20 deploys per day)
Example:
workflows: version: 2 build-and-deploy: jobs: - create-release: filters: branches: only: master - prepare - unit-tests: requires: - prepare - functional-tests: requires: - prepare - deploy: requires: - create-release - unit-tests - functional-tests filters: branches: only: master
it gets triggered on every push
store_artifacts makes the zip-file available
latest file info can be found using: https://circleci.com/api/v1.1/project/github/wolfposd/Tinfoil/latest/artifacts
but i cant figure out how to get a direct link to the zip
Yeah, I would have a step that runs npm run build
and serve that build directory inside the docker image. The "dockerization" step is really just having web server run in a container to serve the static JS bundle.
The more I read this article, the more confused I get about what their goal is.
If it's for testing CI, most CI tools should allow you to just run npm
from within the pipeline (I've never used CircleCI but their docs look like they support it)
You know what you get with that hiring process? A bunch of prima donnas. A team of devs who will spend days arguing over which bleeding-edge technology platform to use, and high-level design issues - all of which matter - but nobody wants to write the 95% nuts-and-bolts drudgework, because it's boring and painfully dry and there's no glory in it.
Here is a fun (apocryphal) anecdote about super-trendy people who can talk the talk but not walk the walk.
What's officially designated as the Dashboard is https://circleci.com/dashboard but as you mentioned, it list recent builds with the project list on the left. I assume that's what you're already looking at?
Perhaps the closest thing is the Insights page: https://circleci.com/build-insights/
Read the docs again: https://circleci.com/docs/2.0/postgres-config/
You just have to match the user, db name and password used in the postgresql service in your app env. Docs state that you will use localhost as host and port will be the default 5432
We use emulators for screenshot tests and some espresso testing. Initially I tried to get it up and running in CircleCI but it was extremely slow and clunky.
My suggestion would be to take a look at Firebase Test Lab. I switched to that and its been extremely useful. I just have a job which builds the apk and triggers the tests to run on Test Lab and waits for it to finish. It's reasonably fast and pretty cheap. We have over 6000 builds a month and our costs are only around 400-500$ a month. This is for a team of 7 developers running tests on every pull request ( and every subsequent commit on that PR ).
If you do want to continue with CircleCI, check out the following links.
https://circleci.com/docs/2.0/language-android/ (This wasn't available when I was working on this, so it might all you need).
https://discuss.circleci.com/t/thank-you-and-android-build-example/11298
https://discuss.circleci.com/t/example-android-configuration/10254/4
core.spec
is a specification DSL and currently supports runtime verification and test generation. So, nothing you can't do in any other language. And since there are no types, you can't use techniques like this to create types that witness your specification. Although there are some very early experiments in static type checking.
core.typed
aims to be an actual static type system and looks decent, but it seems to get (very little love)[https://circleci.com/blog/why-were-no-longer-using-core-typed/) from the Clojure community, to no ones surprise.
But I'm not a Clojure guy, so I might be wrong with everything.
It is possible to manually trigger builds with the API, but I see your point, but when would you trigger it and how? After a successful build or maybe through a slack command?
CircleCI has a free tier that gives you one concurrent build and something like 1500 minutes per month. Should be fine if all you want to do is scp some files to a remote host. If your app is open-source, you get some additional capacity.
There are a number of cloud hosting companies that you can use for CI. CircleCi is one of the bigger ones. At the company I work for thats what we did until we built out a a farm of Mac Mini Jenkins slaves.
CircleCI connected to Github.
A couple of patterns in the config:
deployment: deploy_staging: branch: staging commands: - echo "Do stuff" deploy_production: branch: production commands: - echo "Do stuff"
Then reset (or merge) production
branch to the tag, gives a little flexibility in that you can set production to something else if needed.
Can also be a regex even semver with something like: branch: /\d+\.\d+\.\d*[02468]/